[PATCH] libosmo-sccp[master]: add OSMO_SS7_PC_INVALID, add osmo_ss7_pc_is_valid()

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Wed Aug 9 11:55:04 UTC 2017


Review at  https://gerrit.osmocom.org/3450

add OSMO_SS7_PC_INVALID, add osmo_ss7_pc_is_valid()

Introduce OSMO_SS7_PC_INVALID to mark an unset point code.

Add static osmo_ss7_pc_is_valid() (name matches schema of
osmo_ss7_pc_is_local()).

In osmo_ss7_pointcode_print(), return "(no PC)" if !osmo_ss7_pc_is_valid(), for
convenient printing of any PC state.

Subsequent patches will use this for
osmo_ss7_instance (I7f0f0c89b7335d9da24161bfac8234be214ca00c)
as well as osmo_sccp_user (I8684c9b559712072c772012890bbf7efa7c8eb35).

Rationale:

Currently, in osmo_ss7_vty.c we had "if (inst->cfg.primary_pc)" suggesting 0 is
invalid, but in struct osmo_sccp_user we have flag pc_valid suggesting 0 is
indeed valid. All known point code formats are <= 24bit, so we can easily use
0xffffffff as indicator for an unset PC, which removes the need to remember to
set a second field for validity and keeps the structs nice and lean.

Change-Id: Ib5715bf03a4de7713a7a809dfd821c700255ba8c
---
M include/osmocom/sigtran/osmo_ss7.h
M src/osmo_ss7.c
2 files changed, 17 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/50/3450/1

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 @@
 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 @@
 
 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),

-- 
To view, visit https://gerrit.osmocom.org/3450
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib5715bf03a4de7713a7a809dfd821c700255ba8c
Gerrit-PatchSet: 1
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list