AS loadsharing: Introduce combined_linkset (details)
AS loadsharing: Initial routing implementation based on extended-SLS (details)
AS loadsharing: Implement AS loadshare, skip unavailable AS/lset when (details)
AS loadsharing: Introduce AS rate_ctr rx:msu:sls:* (details)
AS loadsharing: Introduce AS rate_ctr tx:msu:sls:* (details)
ASP loadsharing: Pass ownership of Tx xua_msg down the stack [1/2] (details)
ASP loadsharing: Pass ownership of Rx xua_msg up the stack [2/2] (details)
ASP loadsharing: Pass xua_msg down to xua_as_transmit_msg (details)
ASP loadsharing: Implement based on VTY configuration (details)
sccp: Apply SLS on locally-originated transmitted Connection-Oriented (details)
Commit
544637531ba28153434467bc228f168708e4e813
by Pau Espin Pedrol
AS loadsharing: Introduce combined_linkset
A "Combined linkset" is a set of routes for different AS or linksets whose destination (DPC & mask) and priority are the same.
An SP is expected to load share traffic among linksets/AS of a given combined linkset, based on DPC/OPC,SLS. This means certain state or heuristics need to be stored in the combined linkset in order to keep forwarding messages of the same transaction (SLS) over the same specific AS/linkset.
This commit introduces the osmo_ss7_combined_linkset object, which is roughly a set of osmo_ss7_route sharing DPC+MASK+PRIO key, and it is placed in between the osmo_ss7_route_table and osmo_ss7_route entries. User still operates/manages indiviual routes, but those are grouped internally inside its corresponding combined linkset.
No routing change is implemented in this commit. Code is only tweaked minimally so far to retrieve the first route in the combined link. This will allow future work, i.e to: - Check if data can be sent over the combined link (at least one AS/linkset is ACTIVE), and otherwise try using a combined link with a less specific match (shorter prefix mask or/and lower priority). - Select one of the AS/linksets inserted the combined link, based on OPC/DPC/SLS of the message.
Commit
fee7fc09c939dce8b5e1b168d33cfa91e471921b
by Pau Espin Pedrol
AS loadsharing: Initial routing implementation based on extended-SLS
This commit adds a new set of APIs and structs to support routing based on OPC,DPC,SLS fields and hence to support AS-loadshare.
The routing decision is still actually left as beforehand, ie. the first AS/linkset in the combined_linkset is selected.
This will allow future work, i.e to: - Check if data can be sent over the combined link (at least one AS/linkset is ACTIVE), and otherwise try using a combined link with a less specific match (shorter prefix mask or/and lower priority). - Select one of the AS/linksets in the combined link based on a round robin approach.
Commit
ebc633d559467ad0f6f50dce4b6e415b24ac2d16
by Pau Espin Pedrol
AS loadsharing: Implement AS loadshare, skip unavailable AS/lset when choosing
Pick normal route containing destination AS/lset to serve a given func(<OPC,DPC,SLS>)=eSLS on a round-robin base. If normal route becomes unavailable, pick an alternative route in a similar way. This alternative route will be used until itself becomes unavailable or the normal route becomes available again.
Commit
da2d0fe1a206ce808708ad4c2aa582c9711aa0e0
by Pau Espin Pedrol
ASP loadsharing: Pass ownership of Tx xua_msg down the stack [1/2]
This is a first step towards getting MTP OPC & SLS fields down the stack so that they can be used to implement loadsharing at ASP level. So far, we always encode the xua_msg (which holds the OPC and SLS info into xua_msg->mtp) into a msgb before passing it to as->fi through event XUA_AS_E_TRANSFER_REQ, which in turn calls xua_as_transmit_msg(as, msg).
This patch is part 1 of 2 patches, which only modifies mostly the Tx path, but still requires modifications on Rx path (done in patch 2/2) to properly handle the forwarding path from Rx to Tx without double freeing. It is submitted in 2 parts to ease code reviewing.
Future patches will modify that code to pass a xua_msg and only encode it into a msgb deeper into the stack after an ASP has been selected and msg needs to be transmitted.
All previous calls to sua_tx_xua_asp() actually had a memory leak before this change, hence why no xua_msg_free() is removed from callers in this patch. Since now ownership is taken by sua_tx_xua_asp() which always frees the xua msg, the memleak is fixed.
Commit
82c1d2c8c6699349258869bce690293b590a6b0d
by Pau Espin Pedrol
ASP loadsharing: Pass ownership of Rx xua_msg up the stack [2/2]
This is the second step patch where we also pass ownership on Rx path so that forwarded xua_msgs can be passed back to the Tx path without freeing them.
For SUA there's no change needed and we keep freeing the rx xua_msg right at the end of sua_rx_msg() since there's no actual path forwarding a xua_msg object back into Tx path, it always goes through upper layers using newly allocated primitives.
Commit
13fd8c8e5aae1bc19e0012504b48f56252dcdc50
by Pau Espin Pedrol
ASP loadsharing: Pass xua_msg down to xua_as_transmit_msg
This finally allows having access to msg values such as OPC and SLS at the point in code where decision is taken to route the message to one ASP inside the AS. This will be needed to properly implemented ASP loadsharing within an AS.
Commit
91643f2f0449d08a74c6dd1433eb3076754e863e
by Pau Espin Pedrol
ASP loadsharing: Implement based on VTY configuration
Calculate AS Extended SLS (7 bit) out of OPC (12 bits) and SLS (4 bits) based on VTY configuration. Assign a normal destination ASP for each AS-eSLS and try to use it whenever possible; fallback to an alternative ASP when normal ASP is not available.