dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/35254?usp=email )
Change subject: tlv: improve flatten_dict_lists for multiple keys
......................................................................
tlv: improve flatten_dict_lists for multiple keys
when we flatten a list of dicts into a single dict we must make sure
that duplicate key names are not swallowed. This may happen when there
is an array of objects that share the same identifier. When those are
stored all following objects are stored at the same key so that only the
content of the last one survives.
One prominent example where this bug is triggered is the key_reference
in pin_status_template_do. When the MF is selected, there should be 4
key_reference values, but only the last appears.
Change I7f6d03bf323a153f3172853a3ef171cbec8aece7 fixes the problem, but
now the problematic dicts are no longer flattned, which results in a
strange looking output. When append an index to the key, we can still
flatten the dicts and the output looks compact again.
Related: OS#6211
Change-Id: Ie3b418ca3965b0221bbf5f85d7d0e0fbb39d9d87
---
M pySim/tlv.py
1 file changed, 46 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/54/35254/1
diff --git a/pySim/tlv.py b/pySim/tlv.py
index c85d92b..d3c75e2 100644
--- a/pySim/tlv.py
+++ b/pySim/tlv.py
@@ -435,17 +435,33 @@
return False
return True
- def are_elements_unique(lod):
- set_of_keys = set([list(x.keys())[0] for x in lod])
- return len(lod) == len(set_of_keys)
+ def add_element_to_newdict(newdict:dict, key:str, element) -> str:
+ newkey = key
+ count = 1
+ while 1:
+ # Test if the new key (which is equal to key at the beginning) is
+ # already in the newdict. If this is a case we append an index
+ # number and try again.
+ if newkey not in newdict and newkey + "_0" not in newdict:
+ # Rename the already existing zeroth element to element_0, so
+ # that we maintain a consistent element counting.
+ if key in newdict and newkey != key:
+ newdict[key + "_0"] = newdict.pop(key)
+ # Store new element under the new key and leave
+ newdict[newkey] = element
+ return
+
+ # Compute the next key to try
+ newkey = key + "_" + str(count)
+ count = count + 1
if isinstance(inp, list):
- if are_all_elements_dict(inp) and are_elements_unique(inp):
+ if are_all_elements_dict(inp):
# flatten into one shared dict
newdict = {}
for e in inp:
key = list(e.keys())[0]
- newdict[key] = e[key]
+ add_element_to_newdict(newdict, key, e[key])
inp = newdict
# process result as any native dict
return {k:flatten_dict_lists(inp[k]) for k in inp.keys()}
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/35254?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Ie3b418ca3965b0221bbf5f85d7d0e0fbb39d9d87
Gerrit-Change-Number: 35254
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-MessageType: newchange
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmo-sccp/+/35253?usp=email )
Change subject: vty: show cs7 instance asp: Swap columns SCTP Role and Remote Address list
......................................................................
vty: show cs7 instance asp: Swap columns SCTP Role and Remote Address list
The Remote Address is by far the potentially largest column, as well as
the one with more variable length, so move it to the end for better formatting.
Change-Id: I4854219f8898266ae47b9117ef79dbad30a5b0fd
---
M src/osmo_ss7_vty.c
M tests/vty/ss7_asp_test.vty
2 files changed, 48 insertions(+), 36 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/53/35253/1
diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c
index 6ab2401..35f0dda 100644
--- a/src/osmo_ss7_vty.c
+++ b/src/osmo_ss7_vty.c
@@ -1149,9 +1149,9 @@
return CMD_WARNING;
}
- vty_out(vty, " Current Primary Link%s", VTY_NEWLINE);
- vty_out(vty, "ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role%s", VTY_NEWLINE);
- vty_out(vty, "------------ ------------ ------------- ---- ---- ----------------------- ---------%s", VTY_NEWLINE);
+ vty_out(vty, " Current Primary Link%s", VTY_NEWLINE);
+ vty_out(vty, "ASP Name AS Name State Type Role SCTP Role Remote Addresses%s", VTY_NEWLINE);
+ vty_out(vty, "------------ ------------ ------------- ---- ---- --------- -----------------------%s", VTY_NEWLINE);
llist_for_each_entry(asp, &inst->asp_list, list) {
if (asp->cfg.proto == OSMO_SS7_ASP_PROT_IPA && asp->cfg.remote.port == 0 && asp->server) {
@@ -1163,14 +1163,14 @@
snprintf(buf, sizeof(buf), "%s:%s", hostbuf, portbuf);
} else
osmo_ss7_asp_peer_snprintf(buf, sizeof(buf), &asp->cfg.remote);
- vty_out(vty, "%-12s %-12s %-13s %-4s %-4s %-23s %-9s%s",
+ vty_out(vty, "%-12s %-12s %-13s %-4s %-4s %-9s %-23s%s",
asp->cfg.name,
as_list_for_asp(asp, as_buf, sizeof(as_buf)),
asp->fi? osmo_fsm_inst_state_name(asp->fi) : "uninitialized",
get_value_string(osmo_ss7_asp_protocol_vals, asp->cfg.proto),
osmo_str_tolower(get_value_string(osmo_ss7_asp_role_names, asp->cfg.role)),
- buf,
asp->cfg.is_server ? "server" : "client",
+ buf,
VTY_NEWLINE);
}
return CMD_SUCCESS;
diff --git a/tests/vty/ss7_asp_test.vty b/tests/vty/ss7_asp_test.vty
index dcea4ca..73a13b5 100644
--- a/tests/vty/ss7_asp_test.vty
+++ b/tests/vty/ss7_asp_test.vty
@@ -256,27 +256,27 @@
ss7_asp_vty_test(config-cs7-asp)# remote-ip 127.0.0.200
ss7_asp_vty_test(config-cs7-asp)# local-ip 127.0.0.100
ss7_asp_vty_test(config-cs7-asp)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp ? uninitialized m3ua sg 127.0.0.200:12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp ? uninitialized m3ua sg server 127.0.0.200:12345
ss7_asp_vty_test(config-cs7-asp)# remote-ip 127.0.0.201
ss7_asp_vty_test(config-cs7-asp)# local-ip 127.0.0.101
ss7_asp_vty_test(config-cs7-asp)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp ? uninitialized m3ua sg (127.0.0.200|127.0.0.201):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp ? uninitialized m3ua sg server (127.0.0.200|127.0.0.201):12345
ss7_asp_vty_test(config-cs7-asp)# ! Mark as primary:
ss7_asp_vty_test(config-cs7-asp)# remote-ip 127.0.0.201 primary
ss7_asp_vty_test(config-cs7-asp)# ! 'local-ip 127.0.0.101 primary' cannot be tested here since output may be different based on sysctl available
ss7_asp_vty_test(config-cs7-asp)# local-ip 127.0.0.101
...
ss7_asp_vty_test(config-cs7-asp)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp ? uninitialized m3ua sg (127.0.0.200|127.0.0.201*):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp ? uninitialized m3ua sg server (127.0.0.200|127.0.0.201*):12345
ss7_asp_vty_test(config-cs7-asp)# show running-config
...
local-ip 127.0.0.100
@@ -289,10 +289,10 @@
ss7_asp_vty_test(config-cs7-asp)# remote-ip 127.0.0.201
ss7_asp_vty_test(config-cs7-asp)# local-ip 127.0.0.101
ss7_asp_vty_test(config-cs7-asp)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp ? uninitialized m3ua sg (127.0.0.200|127.0.0.201):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp ? uninitialized m3ua sg server (127.0.0.200|127.0.0.201):12345
ss7_asp_vty_test(config-cs7-asp)# show running-config
...
local-ip 127.0.0.100
@@ -361,26 +361,26 @@
ss7_asp_vty_test(config-cs7-as)# routing-key 0 3.2.1
ss7_asp_vty_test(config-cs7-as)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp my-ass ASP_DOWN m3ua sg (127.0.0.200|127.0.0.201):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp my-ass ASP_DOWN m3ua sg server (127.0.0.200|127.0.0.201):12345
ss7_asp_vty_test(config-cs7-as)# exit
ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp my-ass ASP_DOWN m3ua sg (127.0.0.200|127.0.0.201):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp my-ass ASP_DOWN m3ua sg server (127.0.0.200|127.0.0.201):12345
ss7_asp_vty_test(config-cs7)# exit
ss7_asp_vty_test(config)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
-my-asp my-ass ASP_DOWN m3ua sg (127.0.0.200|127.0.0.201):12345 server
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
+my-asp my-ass ASP_DOWN m3ua sg server (127.0.0.200|127.0.0.201):12345
ss7_asp_vty_test(config)# do show cs7 instance 0 as all
Routing Routing Key Cic Cic Traffic
@@ -423,9 +423,9 @@
ss7_asp_vty_test(config-cs7)# no asp my-asp
ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 asp
- Current Primary Link
-ASP Name AS Name State Type Role Remote IPaddr & Port SCTP Role
------------- ------------ ------------- ---- ---- ----------------------- ---------
+ Current Primary Link
+ASP Name AS Name State Type Role SCTP Role Remote Addresses
+------------ ------------ ------------- ---- ---- --------- -----------------------
ss7_asp_vty_test(config-cs7)# do show cs7 instance 0 as all
Routing Routing Key Cic Cic Traffic
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sccp/+/35253?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-sccp
Gerrit-Branch: master
Gerrit-Change-Id: I4854219f8898266ae47b9117ef79dbad30a5b0fd
Gerrit-Change-Number: 35253
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange
Attention is currently required from: laforge.
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-netif/+/35240?usp=email )
Change subject: stream: Use new multiaddr APIs to log whole set of sock addresses
......................................................................
Patch Set 5:
(1 comment)
Patchset:
PS4:
> I'm wondering if we really want to store/display/... […]
I'm also fine with not merging this patch, since I agree prefixes in log lines end up being quite long if the user has several addresses configured in a socket (or uses 0.0.0.0|::).
--
To view, visit https://gerrit.osmocom.org/c/libosmo-netif/+/35240?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmo-netif
Gerrit-Branch: master
Gerrit-Change-Id: I7ae300595825836cc7d6fa07238c0c2f15d14e85
Gerrit-Change-Number: 35240
Gerrit-PatchSet: 5
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-CC: laforge <laforge(a)osmocom.org>
Gerrit-Attention: laforge <laforge(a)osmocom.org>
Gerrit-Comment-Date: Thu, 07 Dec 2023 13:32:26 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: comment