<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15817">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP: ss7: Set Traffic Mode Type in ASPAC msg if set in VTY<br><br>TODO: Make sure the new prim is used to construct the message in lower<br>layers.<br><br>Related: OS#4220<br>Change-Id: Icce0e672f6180ebc92ca34f538d41161d02fecb9<br>---<br>M src/xua_asp_fsm.c<br>1 file changed, 55 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/17/15817/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c</span><br><span>index 9dc9a82..166811e 100644</span><br><span>--- a/src/xua_asp_fsm.c</span><br><span>+++ b/src/xua_asp_fsm.c</span><br><span>@@ -1,6 +1,6 @@</span><br><span> /* SCCP M3UA / SUA ASP osmo_fsm according to RFC3868 4.3.1 */</span><br><span> /* (C) Copyright 2017 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(0, 100%, 40%);">- * </span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span> * All Rights reserved.</span><br><span> *</span><br><span> * SPDX-License-Identifier: GPL-2.0+</span><br><span>@@ -36,7 +36,7 @@</span><br><span> * * translate incoming SUA/M3UA msg_class/msg_type to xua_asp_event</span><br><span> * * propagate state transitions to XUA_AS_FSM via _onenter functiosn</span><br><span> * * notify the Layer Management of any relevant changes</span><br><span style="color: hsl(0, 100%, 40%);">- * * </span><br><span style="color: hsl(120, 100%, 40%);">+ * *</span><br><span> */</span><br><span> </span><br><span> /* According to RFC3868 Section 8 */</span><br><span>@@ -99,6 +99,38 @@</span><br><span> } t_ack;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static unsigned int xua_asp_get_rctx(struct osmo_ss7_asp *asp, uint32_t *rctxs, size_t len)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t rctx_next = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_ss7_as *as;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ llist_for_each_entry(as, &asp->inst->as_list, list) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!osmo_ss7_as_has_asp(as, asp))</span><br><span style="color: hsl(120, 100%, 40%);">+ continue;</span><br><span style="color: hsl(120, 100%, 40%);">+ rctxs[rctx_next] = as->cfg.routing_key.context;</span><br><span style="color: hsl(120, 100%, 40%);">+ rctx_next++;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return rctx_next;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+static int xua_asp_add_rctx(struct osmo_ss7_asp *asp, struct xua_msg *xua)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t rctxs[32];</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t rctx_cnt = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rctx_cnt = xua_asp_get_rctx(asp, rctxs, ARRAY_SIZE(rctxs));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rctx_cnt == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < rctx_cnt; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+ rctxs[i] = htonl(rctxs[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+ // FIXME: add 4 bytes for TAG + LEN?</span><br><span style="color: hsl(120, 100%, 40%);">+ return xua_msg_add_data(xua, SUA_IEI_ROUTE_CTX, rctx_cnt * sizeof(uint32_t), (uint8_t *) &rctxs[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+}*/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct osmo_xlm_prim *xua_xlm_prim_alloc(enum osmo_xlm_prim_type prim_type,</span><br><span> enum osmo_prim_operation op)</span><br><span> {</span><br><span>@@ -194,8 +226,27 @@</span><br><span> case XUA_ASP_E_ASPTM_ASPAC:</span><br><span> /* RFC3868 Ch. 3.6.1 */</span><br><span> xua->hdr = XUA_HDR(SUA_MSGC_ASPTM, SUA_ASPTM_ACTIVE);</span><br><span style="color: hsl(0, 100%, 40%);">- /* Optional: Traffic Mode Type */</span><br><span> /* Optional: Routing Context */</span><br><span style="color: hsl(120, 100%, 40%);">+ uint32_t rctxs[32];</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t rctx_cnt = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ size_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_ss7_as *as;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ rctx_cnt = xua_asp_get_rctx(asp, rctxs, ARRAY_SIZE(rctxs));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Optional: Traffic Mode */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rctx_cnt) {</span><br><span style="color: hsl(120, 100%, 40%);">+ as = osmo_ss7_as_find_by_rctx(asp->inst, rctxs[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (as->cfg.mode_set_by_vty)</span><br><span style="color: hsl(120, 100%, 40%);">+ xua_msg_add_u32(xua, SUA_IEI_TRAF_MODE_TYP, as->cfg.mode);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Optional: Routing Context */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rctx_cnt) {</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < rctx_cnt; i++)</span><br><span style="color: hsl(120, 100%, 40%);">+ rctxs[i] = htonl(rctxs[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+ // FIXME: add 4 bytes for TAG + LEN?</span><br><span style="color: hsl(120, 100%, 40%);">+ xua_msg_add_data(xua, SUA_IEI_ROUTE_CTX, rctx_cnt * sizeof(uint32_t), (uint8_t *) &rctxs[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> /* Optional: TID Label */</span><br><span> /* Optional: DRN Label */</span><br><span> /* Optional: Info String */</span><br><span>@@ -205,7 +256,7 @@</span><br><span> xua->hdr = XUA_HDR(SUA_MSGC_ASPTM, SUA_ASPTM_ACTIVE_ACK);</span><br><span> /* Optional: Traffic Mode Type */</span><br><span> /* Mandatory: Routing Context */</span><br><span style="color: hsl(0, 100%, 40%);">- //FIXME xua_msg_add_u32(xua, SUA_IEI_ROUTE_CTX, </span><br><span style="color: hsl(120, 100%, 40%);">+ //FIXME xua_msg_add_u32(xua, SUA_IEI_ROUTE_CTX,</span><br><span> /* Optional: Info String */</span><br><span> break;</span><br><span> case XUA_ASP_E_ASPTM_ASPIA:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15817">change 15817</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15817"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: libosmo-sccp </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icce0e672f6180ebc92ca34f538d41161d02fecb9 </div>
<div style="display:none"> Gerrit-Change-Number: 15817 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>