This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
lynxis lazus gerrit-no-reply at lists.osmocom.orglynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/21247 )
Change subject: ns2: move link layer type into NSE
......................................................................
ns2: move link layer type into NSE
Even it was in theory possible to mix NS-VC ll types within
a NSE. This is an unrealistic configuration.
Further more to select the correct load sharing mechanism
the NSE must know the correct link layer.
Change-Id: I18dfd40a2429cd61b7c4a3dad5f226c64296f7d8
---
M include/osmocom/gprs/gprs_ns2.h
M src/gb/gprs_ns2.c
M src/gb/gprs_ns2_fr.c
M src/gb/gprs_ns2_frgre.c
M src/gb/gprs_ns2_internal.h
M src/gb/gprs_ns2_udp.c
M src/gb/gprs_ns2_vty.c
7 files changed, 22 insertions(+), 30 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/47/21247/1
diff --git a/include/osmocom/gprs/gprs_ns2.h b/include/osmocom/gprs/gprs_ns2.h
index 70b4bca..2da2eef 100644
--- a/include/osmocom/gprs/gprs_ns2.h
+++ b/include/osmocom/gprs/gprs_ns2.h
@@ -139,7 +139,8 @@
int gprs_ns2_nse_foreach_nsvc(struct gprs_ns2_nse *nse,
gprs_ns2_foreach_nsvc_cb cb, void *cb_data);
struct gprs_ns2_nse *gprs_ns2_nse_by_nsei(struct gprs_ns2_inst *nsi, uint16_t nsei);
-struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei);
+struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei,
+ enum gprs_ns2_ll linklayer);
uint16_t gprs_ns2_nse_nsei(struct gprs_ns2_nse *nse);
void gprs_ns2_free_nse(struct gprs_ns2_nse *nse);
void gprs_ns2_free_nses(struct gprs_ns2_inst *nsi);
diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c
index 004d0ad..25758cf 100644
--- a/src/gb/gprs_ns2.c
+++ b/src/gb/gprs_ns2.c
@@ -226,7 +226,7 @@
if (!buf_len)
return NULL;
- switch (nsvc->ll) {
+ switch (nsvc->nse->ll) {
case GPRS_NS2_LL_UDP:
if (!gprs_ns2_is_ip_bind(nsvc->bind)) {
buf[0] = '\0';
@@ -392,15 +392,11 @@
/* signalling */
nsvc = ns2_load_sharing_signal(nse);
} else {
- enum gprs_ns2_ll ll;
-
/* data with load sharing parameter */
if (llist_empty(&nse->nsvc))
return NULL;
- nsvc = llist_first_entry(&nse->nsvc, struct gprs_ns2_vc, list);
- ll = nsvc->ll;
- switch (ll) {
+ switch (nse->ll) {
case GPRS_NS2_LL_FR:
nsvc = ns2_load_sharing_modulor(nse, bvci, link_selector);
break;
@@ -671,7 +667,7 @@
* \param[in] nsi NS instance in which to create NS Entity
* \param[in] nsei NS Entity Identifier of to-be-created NSE
* \returns newly-allocated NS-E in successful case; NULL on error */
-struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei)
+struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei, enum gprs_ns2_ll linklayer)
{
struct gprs_ns2_nse *nse;
@@ -685,6 +681,7 @@
if (!nse)
return NULL;
+ nse->ll = linklayer;
nse->nsei = nsei;
nse->nsi = nsi;
nse->first = true;
@@ -840,7 +837,7 @@
return GPRS_NS2_CS_SKIPPED;
}
- nse = gprs_ns2_create_nse(bind->nsi, nsei);
+ nse = gprs_ns2_create_nse(bind->nsi, nsei, bind->ll);
if (!nse) {
return GPRS_NS2_CS_ERROR;
}
@@ -850,8 +847,6 @@
if (!nsvc)
return GPRS_NS2_CS_SKIPPED;
- nsvc->ll = GPRS_NS2_LL_UDP;
-
nsvci = tlvp_val16be(&tp, NS_IE_VCI);
nsvc->nsvci = nsvci;
nsvc->nsvci_is_valid = true;
@@ -921,7 +916,7 @@
struct gprs_ns2_nse *nse = gprs_ns2_nse_by_nsei(bind->nsi, nsei);
if (!nse) {
- nse = gprs_ns2_create_nse(bind->nsi, nsei);
+ nse = gprs_ns2_create_nse(bind->nsi, nsei, GPRS_NS2_LL_UDP);
if (!nse)
return NULL;
}
@@ -942,7 +937,7 @@
struct gprs_ns2_vc *nsvc;
if (!nse) {
- nse = gprs_ns2_create_nse(bind->nsi, nsei);
+ nse = gprs_ns2_create_nse(bind->nsi, nsei, GPRS_NS2_LL_UDP);
if (!nse)
return -1;
}
diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c
index 40ea64c..4eb75fd 100644
--- a/src/gb/gprs_ns2_fr.c
+++ b/src/gb/gprs_ns2_fr.c
@@ -390,6 +390,7 @@
return -ENOSPC;
bind->driver = &vc_driver_fr;
+ bind->ll = GPRS_NS2_LL_FR;
bind->send_vc = fr_vc_sendmsg;
bind->free_vc = free_vc;
bind->dump_vty = dump_vty;
@@ -502,7 +503,7 @@
struct priv_vc *priv = NULL;
struct gprs_ns2_nse *nse = gprs_ns2_nse_by_nsei(bind->nsi, nsei);
if (!nse) {
- nse = gprs_ns2_create_nse(bind->nsi, nsei);
+ nse = gprs_ns2_create_nse(bind->nsi, nsei, GPRS_NS2_LL_FR);
if (!nse)
return NULL;
created_nse = true;
@@ -523,7 +524,6 @@
nsvc->nsvci = nsvci;
nsvc->nsvci_is_valid = true;
- nsvc->ll = GPRS_NS2_LL_FR;
gprs_ns2_vc_fsm_start(nsvc);
diff --git a/src/gb/gprs_ns2_frgre.c b/src/gb/gprs_ns2_frgre.c
index cd478d6..3c276bc 100644
--- a/src/gb/gprs_ns2_frgre.c
+++ b/src/gb/gprs_ns2_frgre.c
@@ -555,6 +555,7 @@
}
bind->driver = &vc_driver_frgre;
+ bind->ll = GPRS_NS2_LL_FR_GRE;
bind->send_vc = frgre_vc_sendmsg;
bind->free_vc = free_vc;
bind->nsi = nsi;
diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h
index 2c74bab..c7256bc 100644
--- a/src/gb/gprs_ns2_internal.h
+++ b/src/gb/gprs_ns2_internal.h
@@ -123,6 +123,9 @@
/*! true if this NSE has at least one alive VC */
bool alive;
+ /*! which link-layer are we based on? */
+ enum gprs_ns2_ll ll;
+
struct osmo_fsm_inst *bss_sns_fi;
};
@@ -164,8 +167,6 @@
struct rate_ctr_group *ctrg;
struct osmo_stat_item_group *statg;
- /*! which link-layer are we based on? */
- enum gprs_ns2_ll ll;
enum gprs_ns2_vc_mode mode;
struct osmo_fsm_inst *fi;
@@ -186,6 +187,9 @@
/*! if VCs use reset/block/unblock method. IP shall not use this */
enum gprs_ns2_vc_mode vc_mode;
+ /*! which link-layer are we based on? */
+ enum gprs_ns2_ll ll;
+
/*! send a msg over a VC */
int (*send_vc)(struct gprs_ns2_vc *nsvc, struct msgb *msg);
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index 38c1a16..7f82667 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -322,6 +322,7 @@
}
bind->driver = &vc_driver_ip;
+ bind->ll = GPRS_NS2_LL_UDP;
bind->send_vc = nsip_vc_sendmsg;
bind->free_vc = free_vc;
bind->dump_vty = dump_vty;
@@ -391,8 +392,6 @@
priv = nsvc->priv;
priv->remote = *remote;
- nsvc->ll = GPRS_NS2_LL_UDP;
-
return nsvc;
}
@@ -403,9 +402,6 @@
{
struct priv_bind *priv;
- if (nsvc->ll != GPRS_NS2_LL_UDP)
- return NULL;
-
if (nsvc->bind->driver != &vc_driver_ip)
return NULL;
@@ -420,7 +416,7 @@
{
struct priv_vc *priv;
- if (nsvc->ll != GPRS_NS2_LL_UDP)
+ if (nsvc->bind->driver != &vc_driver_ip)
return NULL;
priv = nsvc->priv;
@@ -442,7 +438,7 @@
struct priv_vc *vpriv;
struct priv_bind *bpriv;
- if (nsvc->ll != GPRS_NS2_LL_UDP)
+ if (nsvc->bind->driver != &vc_driver_ip)
return false;
vpriv = nsvc->priv;
diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c
index 57b92e9..e63b962 100644
--- a/src/gb/gprs_ns2_vty.c
+++ b/src/gb/gprs_ns2_vty.c
@@ -495,11 +495,6 @@
return CMD_WARNING;
}
- if (vtyvc->ll != GPRS_NS2_LL_FR_GRE) {
- vty_out(vty, "Warning: seting FR DLCI on non-FR NSE%s",
- VTY_NEWLINE);
- }
-
vtyvc->frdlci = dlci;
return CMD_SUCCESS;
@@ -848,7 +843,7 @@
nse = gprs_ns2_nse_by_nsei(vty_nsi, vtyvc->nsei);
if (!nse) {
- nse = gprs_ns2_create_nse(vty_nsi, vtyvc->nsei);
+ nse = gprs_ns2_create_nse(vty_nsi, vtyvc->nsei, vtyvc->ll);
if (!nse) {
/* Could not create NSE for VTY */
continue;
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/21247
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I18dfd40a2429cd61b7c4a3dad5f226c64296f7d8
Gerrit-Change-Number: 21247
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/20201119/a5d33eba/attachment.htm>