pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/39705?usp=email )
Change subject: AS loadsharing: Log routing lookup logic ......................................................................
AS loadsharing: Log routing lookup logic
Loggin very similar to what we already have for ASP loadsharing in ss7_as_select_asp_loadshare().
Change-Id: I6b4983bc2cc8bd231a5d85f378be8c93c6f4fa27 --- M src/osmo_ss7_combined_linkset.c M src/ss7_combined_linkset.h 2 files changed, 46 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran refs/changes/05/39705/1
diff --git a/src/osmo_ss7_combined_linkset.c b/src/osmo_ss7_combined_linkset.c index 99b0c79..a741aba 100644 --- a/src/osmo_ss7_combined_linkset.c +++ b/src/osmo_ss7_combined_linkset.c @@ -25,6 +25,7 @@ #include <osmocom/core/logging.h> #include <osmocom/sigtran/osmo_ss7.h>
+#include "ss7_as.h" #include "ss7_combined_linkset.h" #include "ss7_route.h" #include "ss7_route_table.h" @@ -219,7 +220,8 @@ ss7_combined_linkset_lookup_route(struct osmo_ss7_combined_linkset *clset, const struct osmo_ss7_route_label *rtlabel) { struct osmo_ss7_route *rt; - ext_sls_t esls = osmo_ss7_instance_calc_itu_ext_sls(clset->rtable->inst, rtlabel); + struct osmo_ss7_instance *inst = clset->rtable->inst; + ext_sls_t esls = osmo_ss7_instance_calc_itu_ext_sls(inst, rtlabel); struct osmo_ss7_esls_entry *eslse = &clset->esls_table[esls];
/* First check if we have a cached route for this ESLS */ @@ -228,7 +230,22 @@ if (rt == eslse->normal_rt) { /* We can transmit over normal route. * Clean up alternative route since it's not needed anymore */ - eslse->alt_rt = NULL; + if (eslse->alt_rt) { + LOGPCLSET(clset, DLSS7, LOGL_NOTICE, "RT lookup: OPC=%u=%s,DPC=%u=%s,SLS=%u -> eSLS=%u: " + "Normal Route via '%s' became available, drop use of Alternative Route via '%s'\n", + rtlabel->opc, osmo_ss7_pointcode_print(inst, rtlabel->opc), + rtlabel->dpc, osmo_ss7_pointcode_print2(inst, rtlabel->dpc), + rtlabel->sls, esls, + eslse->normal_rt->dest.as ? eslse->normal_rt->dest.as->cfg.name : "<linkset>", + eslse->alt_rt->dest.as ? eslse->alt_rt->dest.as->cfg.name : "<linkset>"); + eslse->alt_rt = NULL; + } + LOGPCLSET(clset, DLSS7, LOGL_DEBUG, + "RT lookup: OPC=%u=%s,DPC=%u=%s,SLS=%u -> eSLS=%u: use Normal Route via '%s'\n", + rtlabel->opc, osmo_ss7_pointcode_print(inst, rtlabel->opc), + rtlabel->dpc, osmo_ss7_pointcode_print2(inst, rtlabel->dpc), + rtlabel->sls, esls, + eslse->normal_rt->dest.as ? eslse->normal_rt->dest.as->cfg.name : "<linkset>"); return rt; } /* We can transmit over alternative route: */ @@ -242,13 +259,29 @@ rt = ss7_combined_linkset_select_route_roundrobin(clset); /* Either a normal route was selected or none found: */ eslse->normal_rt = rt; + if (rt) { + LOGPCLSET(clset, DLSS7, LOGL_DEBUG, "RT loookup: OPC=%u=%s,DPC=%u=%s,SLS=%u -> eSLS=%u: " + "picked Normal Route via '%s' round-robin style\n", + rtlabel->opc, osmo_ss7_pointcode_print(inst, rtlabel->opc), + rtlabel->dpc, osmo_ss7_pointcode_print2(inst, rtlabel->dpc), + rtlabel->sls, esls, + rt->dest.as ? rt->dest.as->cfg.name : "<linkset>"); + } return rt; }
/* Normal route unavailable and no alternative route (or unavailable too). * start ITU Q.704 section 7 "forced rerouting" procedure: */ rt = ss7_combined_linkset_select_route_roundrobin(clset); - if (rt) + if (rt) { eslse->alt_rt = rt; + LOGPCLSET(clset, DLSS7, LOGL_NOTICE, "RT Lookup: OPC=%u=%s,DPC=%u=%s,SLS=%u -> eSLS=%u: " + "Normal Route via '%s' unavailable, picked Alternative Route via '%s' round-robin style\n", + rtlabel->opc, osmo_ss7_pointcode_print(inst, rtlabel->opc), + rtlabel->dpc, osmo_ss7_pointcode_print2(inst, rtlabel->dpc), + rtlabel->sls, esls, + eslse->normal_rt->dest.as ? eslse->normal_rt->dest.as->cfg.name : "<linkset>", + eslse->alt_rt->dest.as ? eslse->alt_rt->dest.as->cfg.name : "<linkset>"); + } return rt; } diff --git a/src/ss7_combined_linkset.h b/src/ss7_combined_linkset.h index b80a007..b79810b 100644 --- a/src/ss7_combined_linkset.h +++ b/src/ss7_combined_linkset.h @@ -56,3 +56,13 @@ ss7_combined_linkset_del_route(struct osmo_ss7_route *rt); struct osmo_ss7_route * ss7_combined_linkset_lookup_route(struct osmo_ss7_combined_linkset *clset, const struct osmo_ss7_route_label *rtlabel); + +#define LOGPCLSET(clset, subsys, level, fmt, args ...) do { \ + char _pc_str[MAX_PC_STR_LEN]; \ + char _mask_str[MAX_PC_STR_LEN]; \ + _LOGSS7((clset)->rtable->inst, subsys, level, \ + "CombinedLinkset(dpc=%u=%s,mask=0x%x=%s,prio=%u) " fmt, \ + (clset)->cfg.pc, osmo_ss7_pointcode_print_buf(_pc_str, MAX_PC_STR_LEN, (clset)->rtable->inst, (clset)->cfg.pc), \ + (clset)->cfg.mask, osmo_ss7_pointcode_print_buf(_mask_str, MAX_PC_STR_LEN, (clset)->rtable->inst, (clset)->cfg.mask), \ + (clset)->cfg.priority, ## args); \ + } while (0)