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>