Change in libosmocore[master]: gprs_ns2_sns: replace ns2_sns_type with address family

lynxis lazus gerrit-no-reply at lists.osmocom.org
Sun Jun 6 21:38:45 UTC 2021


lynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/24589 )


Change subject: gprs_ns2_sns: replace ns2_sns_type with address family
......................................................................

gprs_ns2_sns: replace ns2_sns_type with address family

Reduces the code as the conversion between address family (bind)
and ns2_sns_type is not needed anymore.

Related: OS#5036
Change-Id: I1bcdd43af34c926d4b88491d00669422c299bef7
---
M src/gb/gprs_ns2_sns.c
1 file changed, 23 insertions(+), 28 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/89/24589/1

diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 0badcee..ec4bd87 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -56,11 +56,6 @@
 
 #define S(x)	(1 << (x))
 
-enum ns2_sns_type {
-	IPv4,
-	IPv6,
-};
-
 enum ns2_sns_role {
 	GPRS_SNS_ROLE_BSS,
 	GPRS_SNS_ROLE_SGSN,
@@ -132,7 +127,7 @@
 struct ns2_sns_state {
 	struct gprs_ns2_nse *nse;
 
-	enum ns2_sns_type ip;
+	int family;
 	enum ns2_sns_role role;		/* local role: BSS or SGSN */
 
 	/* holds the list of initial SNS endpoints */
@@ -665,14 +660,14 @@
 	/* Upon receiving an SNS-ADD PDU, if the consequent number of IPv4 endpoints
 	 * exceeds the number of IPv4 endpoints supported by the NSE, the NSE shall send
 	 * an SNS-ACK PDU with a cause code set to "Invalid number of IP4 Endpoints". */
-	switch (gss->ip) {
-	case IPv4:
+	switch (gss->family) {
+	case AF_INET:
 		if (gss->remote.num_ip4 >= gss->num_max_ip4_remote)
 			return -NS_CAUSE_INVAL_NR_NS_VC;
 		/* TODO: log message duplicate */
 		rc = add_ip4_elem(gss, &gss->remote, ip4);
 		break;
-	case IPv6:
+	case AF_INET6:
 		if (gss->remote.num_ip6 >= gss->num_max_ip6_remote)
 			return -NS_CAUSE_INVAL_NR_NS_VC;
 		/* TODO: log message duplicate */
@@ -689,8 +684,8 @@
 	/* Upon receiving an SNS-ADD PDU containing an already configured IP endpoint the
 	 * NSE shall send an SNS-ACK PDU with the cause code "Protocol error -
 	 * unspecified" */
-	switch (gss->ip) {
-	case IPv4:
+	switch (gss->family) {
+	case AF_INET:
 		nsvc = nsvc_by_ip4_elem(nse, ip4);
 		if (nsvc) {
 			/* the nsvc should be already in sync with the ip4 / ip6 elements */
@@ -700,7 +695,7 @@
 		/* TODO: failure case */
 		ns2_nsvc_create_ip4(fi, nse, ip4);
 		break;
-	case IPv6:
+	case AF_INET6:
 		nsvc = nsvc_by_ip6_elem(nse, ip6);
 		if (nsvc) {
 			/* the nsvc should be already in sync with the ip4 / ip6 elements */
@@ -751,7 +746,7 @@
 	}
 }
 
-static int ns2_sns_count_num_local_ep(struct osmo_fsm_inst *fi, enum ns2_sns_type stype)
+static int ns2_sns_count_num_local_ep(struct osmo_fsm_inst *fi, int ip_proto)
 {
 	struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;
 	struct ns2_sns_bind *sbind;
@@ -762,12 +757,12 @@
 		if (!sa)
 			continue;
 
-		switch (stype) {
-		case IPv4:
+		switch (ip_proto) {
+		case AF_INET:
 			if (sa->u.sas.ss_family == AF_INET)
 				count++;
 			break;
-		case IPv6:
+		case AF_INET6:
 			if (sa->u.sas.ss_family == AF_INET6)
 				count++;
 			break;
@@ -805,8 +800,8 @@
 		return;
 	}
 
-	switch (gss->ip) {
-	case IPv4:
+	switch (gss->family) {
+	case AF_INET:
 		ip4_elems = talloc_realloc(fi, gss->local.ip4, struct gprs_ns_ie_ip4_elem, count);
 		if (!ip4_elems)
 			return;
@@ -840,7 +835,7 @@
 		gss->local.num_ip4 = count;
 		gss->num_max_nsvcs = OSMO_MAX(gss->num_max_ip4_remote * gss->local.num_ip4, 8);
 		break;
-	case IPv6:
+	case AF_INET6:
 		/* IPv6 */
 		ip6_elems = talloc_realloc(fi, gss->local.ip6, struct gprs_ns_ie_ip6_elem, count);
 		if (!ip6_elems)
@@ -959,13 +954,13 @@
 		gss->N = 0;
 
 	/* Transmit SNS-CONFIG */
-	switch (gss->ip) {
-	case IPv4:
+	switch (gss->family) {
+	case AF_INET:
 		ns2_tx_sns_config(gss->sns_nsvc, true,
 				  gss->local.ip4, gss->local.num_ip4,
 				  NULL, 0);
 		break;
-	case IPv6:
+	case AF_INET6:
 		ns2_tx_sns_config(gss->sns_nsvc, true,
 				  NULL, 0,
 				  gss->local.ip6, gss->local.num_ip6);
@@ -1108,7 +1103,7 @@
 	 */
 
 	trans_id = *TLVP_VAL(tp, NS_IE_TRANS_ID);
-	if (gss->ip == IPv4) {
+	if (gss->family == AF_INET) {
 		if (!TLVP_PRESENT(tp, NS_IE_IPv4_LIST)) {
 			cause = NS_CAUSE_INVAL_NR_IPv4_EP;
 			ns2_tx_sns_ack(gss->sns_nsvc, trans_id, &cause, NULL, 0, NULL, 0);
@@ -1172,7 +1167,7 @@
 	 * TODO: check if IPv4_LIST/IPv6_LIST and IP_ADDR is present at the same time
 	 */
 	trans_id = *TLVP_VAL(tp, NS_IE_TRANS_ID);
-	if (gss->ip == IPv4) {
+	if (gss->family == AF_INET) {
 		if (TLVP_PRESENT(tp, NS_IE_IPv4_LIST)) {
 			v4_list = (const struct gprs_ns_ie_ip4_elem *) TLVP_VAL(tp, NS_IE_IPv4_LIST);
 			num_v4 = TLVP_LEN(tp, NS_IE_IPv4_LIST) / sizeof(*v4_list);
@@ -2246,13 +2241,13 @@
 		if (TLVP_PRES_LEN(tp, NS_IE_IPv6_EP_NR, 2))
 			gss->num_max_ip6_remote = tlvp_val16be(tp, NS_IE_IPv6_EP_NR);
 		/* decide if we go for IPv4 or IPv6 */
-		if (gss->num_max_ip6_remote && ns2_sns_count_num_local_ep(fi, IPv6)) {
-			gss->ip = IPv6;
+		if (gss->num_max_ip6_remote && ns2_sns_count_num_local_ep(fi, AF_INET6)) {
+			gss->family = AF_INET6;
 			ns2_sns_compute_local_ep_from_binds(fi);
 			num_local_eps = gss->local.num_ip6;
 			num_remote_eps = gss->num_max_ip6_remote;
-		} else if (gss->num_max_ip4_remote && ns2_sns_count_num_local_ep(fi, IPv4)) {
-			gss->ip = IPv4;
+		} else if (gss->num_max_ip4_remote && ns2_sns_count_num_local_ep(fi, AF_INET)) {
+			gss->family = AF_INET;
 			ns2_sns_compute_local_ep_from_binds(fi);
 			num_local_eps = gss->local.num_ip4;
 			num_remote_eps = gss->num_max_ip4_remote;

-- 
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/24589
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I1bcdd43af34c926d4b88491d00669422c299bef7
Gerrit-Change-Number: 24589
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis at fe80.eu>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210606/10681341/attachment.htm>


More information about the gerrit-log mailing list