aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/sigtran/osmo_ss7.h8
-rw-r--r--src/osmo_ss7.c12
2 files changed, 17 insertions, 3 deletions
diff --git a/include/osmocom/sigtran/osmo_ss7.h b/include/osmocom/sigtran/osmo_ss7.h
index bbe425c..967912a 100644
--- a/include/osmocom/sigtran/osmo_ss7.h
+++ b/include/osmocom/sigtran/osmo_ss7.h
@@ -26,6 +26,14 @@ int osmo_ss7_pointcode_parse_mask_or_len(struct osmo_ss7_instance *inst, const c
const char *osmo_ss7_pointcode_print(struct osmo_ss7_instance *inst, uint32_t pc);
const char *osmo_ss7_pointcode_print2(struct osmo_ss7_instance *inst, uint32_t pc);
+/* All known point-code formats have a length of or below 24 bit.
+ * A point-code value exceeding that is used to indicate an unset PC. */
+#define OSMO_SS7_PC_INVALID 0xffffffff
+static inline bool osmo_ss7_pc_is_valid(uint32_t pc)
+{
+ return pc <= 0x00ffffff;
+}
+
/***********************************************************************
* SS7 Routing Tables
***********************************************************************/
diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c
index eb5a4ef..6db3f14 100644
--- a/src/osmo_ss7.c
+++ b/src/osmo_ss7.c
@@ -247,10 +247,16 @@ err:
const char *_osmo_ss7_pointcode_print(char *buf, size_t len, struct osmo_ss7_instance *inst, uint32_t pc)
{
- const struct osmo_ss7_pc_fmt *pc_fmt = inst ? &inst->cfg.pc_fmt : &default_pc_fmt;
- unsigned int num_comp_exp = num_pc_comp_exp(pc_fmt);
- const char *fmtstr = gen_pc_fmtstr(pc_fmt, &num_comp_exp);
+ const struct osmo_ss7_pc_fmt *pc_fmt;
+ unsigned int num_comp_exp;
+ const char *fmtstr;
+
+ if (!osmo_ss7_pc_is_valid(pc))
+ return "(no PC)";
+ pc_fmt = inst ? &inst->cfg.pc_fmt : &default_pc_fmt;
+ num_comp_exp = num_pc_comp_exp(pc_fmt);
+ fmtstr = gen_pc_fmtstr(pc_fmt, &num_comp_exp);
OSMO_ASSERT(fmtstr);
snprintf(buf, len, fmtstr,
pc_comp_shift_and_mask(pc_fmt, 0, pc),