mirror of https://gerrit.osmocom.org/libosmocore
gprs_ns2: Introduce gprs_ns2_create_nse2() for SGSN side SNS
gprs_ns2_create_nse() doesn't allow the caller to specify if the BSS or the SGSN role of IP-SNS shall be implemented. Add gprs_ns2_create_nse2() to fix that. Change-Id: I6db8c36f7c69b592d7d0fbcf323804f7e9912be2 Related: OS#3373
This commit is contained in:
parent
694dad502a
commit
5b034fbab0
|
@ -158,6 +158,9 @@ struct gprs_ns2_nse *gprs_ns2_nse_by_nsei(struct gprs_ns2_inst *nsi, uint16_t ns
|
|||
struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nsei,
|
||||
enum gprs_ns2_ll linklayer,
|
||||
enum gprs_ns2_dialect dialect);
|
||||
struct gprs_ns2_nse *gprs_ns2_create_nse2(struct gprs_ns2_inst *nsi, uint16_t nsei,
|
||||
enum gprs_ns2_ll linklayer,
|
||||
enum gprs_ns2_dialect dialect, bool local_sgsn_role);
|
||||
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);
|
||||
|
|
|
@ -776,9 +776,11 @@ struct gprs_ns2_vc *gprs_ns2_nsvc_by_nsvci(struct gprs_ns2_inst *nsi, uint16_t n
|
|||
/*! Create a NS Entity within given NS instance.
|
||||
* \param[in] nsi NS instance in which to create NS Entity
|
||||
* \param[in] nsei NS Entity Identifier of to-be-created NSE
|
||||
* \param[in] ip_sns_role_sgsn Does local side implement SGSN role?
|
||||
* \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,
|
||||
enum gprs_ns2_ll linklayer, enum gprs_ns2_dialect dialect)
|
||||
struct gprs_ns2_nse *gprs_ns2_create_nse2(struct gprs_ns2_inst *nsi, uint16_t nsei,
|
||||
enum gprs_ns2_ll linklayer, enum gprs_ns2_dialect dialect,
|
||||
bool ip_sns_role_sgsn)
|
||||
{
|
||||
struct gprs_ns2_nse *nse;
|
||||
|
||||
|
@ -792,6 +794,7 @@ struct gprs_ns2_nse *gprs_ns2_create_nse(struct gprs_ns2_inst *nsi, uint16_t nse
|
|||
if (!nse)
|
||||
return NULL;
|
||||
nse->dialect = GPRS_NS2_DIALECT_UNDEF;
|
||||
nse->ip_sns_role_sgsn = ip_sns_role_sgsn;
|
||||
|
||||
if (ns2_nse_set_dialect(nse, dialect) < 0) {
|
||||
talloc_free(nse);
|
||||
|
@ -820,7 +823,10 @@ int ns2_nse_set_dialect(struct gprs_ns2_nse *nse, enum gprs_ns2_dialect dialect)
|
|||
case GPRS_NS2_DIALECT_UNDEF:
|
||||
if (dialect == GPRS_NS2_DIALECT_SNS) {
|
||||
snprintf(sns, sizeof(sns), "NSE%05u-SNS", nse->nsei);
|
||||
nse->bss_sns_fi = ns2_sns_bss_fsm_alloc(nse, sns);
|
||||
if (nse->ip_sns_role_sgsn)
|
||||
nse->bss_sns_fi = ns2_sns_sgsn_fsm_alloc(nse, sns);
|
||||
else
|
||||
nse->bss_sns_fi = ns2_sns_bss_fsm_alloc(nse, sns);
|
||||
if (!nse->bss_sns_fi)
|
||||
return -1;
|
||||
}
|
||||
|
@ -841,6 +847,16 @@ int ns2_nse_set_dialect(struct gprs_ns2_nse *nse, enum gprs_ns2_dialect dialect)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*! Create a NS Entity within given NS instance.
|
||||
* \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,
|
||||
enum gprs_ns2_ll linklayer, enum gprs_ns2_dialect dialect)
|
||||
{
|
||||
return gprs_ns2_create_nse2(nsi, nsei, linklayer, dialect, false);
|
||||
}
|
||||
|
||||
/*! Return the NSEI
|
||||
* \param[in] nse NS Entity
|
||||
* \return the nsei.
|
||||
|
|
|
@ -182,6 +182,9 @@ struct gprs_ns2_nse {
|
|||
|
||||
/*! MTU of a NS PDU. This is the lowest MTU of all NSVCs */
|
||||
uint16_t mtu;
|
||||
|
||||
/*! are we implementing the SGSN role? */
|
||||
bool ip_sns_role_sgsn;
|
||||
};
|
||||
|
||||
/*! Structure representing a single NS-VC */
|
||||
|
|
|
@ -139,6 +139,7 @@ gprs_ns2_aff_cause_prim_strs;
|
|||
gprs_ns2_bind_by_name;
|
||||
gprs_ns2_cause_strs;
|
||||
gprs_ns2_create_nse;
|
||||
gprs_ns2_create_nse2;
|
||||
gprs_ns2_find_vc_by_sockaddr;
|
||||
gprs_ns2_free;
|
||||
gprs_ns2_free_bind;
|
||||
|
|
Loading…
Reference in New Issue