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/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22315 )
Change subject: NS_Emulation: Add CTRL port to administratively disable a NS-VC
......................................................................
NS_Emulation: Add CTRL port to administratively disable a NS-VC
This feature is useful in simulating intermittent or permanent transport network
outage by simply halting processing of all rx+tx in the specified NS-VC
until it is administratively re-enabled.
Change-Id: I742ecf01de15e3edbf0719371f0217a5739b7c8e
RelateD: OS#4521
---
M library/NS_Emulation.ttcnpp
1 file changed, 66 insertions(+), 2 deletions(-)
Approvals:
laforge: Looks good to me, approved
daniel: Looks good to me, but someone else must approve
Jenkins Builder: Verified
diff --git a/library/NS_Emulation.ttcnpp b/library/NS_Emulation.ttcnpp
index 61ebe95..dc8e0ec 100644
--- a/library/NS_Emulation.ttcnpp
+++ b/library/NS_Emulation.ttcnpp
@@ -107,6 +107,7 @@
}
type enumerated NsvcState {
+ NSVC_S_DISABLED, /* administratively disabled */
NSVC_S_DEAD_BLOCKED,
NSVC_S_WAIT_RESET,
NSVC_S_ALIVE_BLOCKED,
@@ -128,6 +129,25 @@
out NsUnitdataRequest;
} with { extension "internal" };
+ /* port from our (internal) point of view */
+ type port NS_CTRL_SP_PT message {
+ in NsDisableVcRequest,
+ NsEnableVcRequest;
+ } with { extension "internal" };
+
+ /* port from the user point of view */
+ type port NS_CTRL_PT message {
+ out NsEnableVcRequest,
+ NsDisableVcRequest;
+ } with { extension "internal" };
+
+ type record NsDisableVcRequest {
+ Nsvci nsvci
+ };
+ type record NsEnableVcRequest {
+ Nsvci nsvci
+ };
+
type component NS_Provider_CT {
/* upper port, facing to NS_Emulation:NSCP */
port NS_PROVIDER_PT NSE;
@@ -187,6 +207,9 @@
/* port towards the per-NSVC components */
port NSint_PT NSVC;
+ /* control port, used to manipulate at runtime */
+ port NS_CTRL_SP_PT NS_CTRL;
+
/* all of the NS configuration a user passes to us */
var NSConfiguration g_config;
var charstring g_id;
@@ -239,7 +262,9 @@
};
type enumerated NsCtrlRequest {
- StartAliveProcedure (0)
+ StartAliveProcedure (0),
+ DisableReq (1), /* administratively disable NS-VC */
+ EnableReq (2) /* administratively enable NS-VC */
};
/* add one NSVC (component and table entry */
@@ -346,6 +371,8 @@
var NsStatusIndication rx_nssi;
var NsUnitdataIndication rx_nsudi;
var NsUnitdataRequest rx_nsudr;
+ var NsDisableVcRequest rx_disar;
+ var NsEnableVcRequest rx_enar;
/* pass from NS-VCs up to user */
[] NSVC.receive(tr_NsStsInd(g_config.nsei, ?, ?, NSVC_S_ALIVE_UNBLOCKED)) -> value rx_nssi {
/* check if this one is the first to be unblocked */
@@ -384,6 +411,14 @@
log2str("Received UnitDataInd for invalid NSEI: ", rx_nsudi));
}
/* from user down to NS-VC */
+ [] NS_CTRL.receive(NsDisableVcRequest:?) -> value rx_disar {
+ var integer nsvc_idx := f_nsvc_find_idx(rx_disar.nsvci);
+ NSVC.send(NsCtrlRequest:DisableReq) to g_nsvcs[nsvc_idx].vc_conn;
+ }
+ [] NS_CTRL.receive(NsEnableVcRequest:?) -> value rx_enar {
+ var integer nsvc_idx := f_nsvc_find_idx(rx_enar.nsvci);
+ NSVC.send(NsCtrlRequest:EnableReq) to g_nsvcs[nsvc_idx].vc_conn;
+ }
[] NS_SP.receive(tr_NsUdReq(g_config.nsei, 0, ?, ?, *)) -> value rx_nsudr {
/* load distribution function */
var integer nsvc_idx := g_unblocked_nsvcs_sig[rx_nsudr.lsp mod lengthof(g_unblocked_nsvcs_sig)];
@@ -577,6 +612,15 @@
var PDU_NS rf;
var ASP_Event evt;
+ [] NS_SP.receive(NsCtrlRequest:DisableReq) {
+ /* To make NS-VCG remove us from list of active NS-VC */
+ f_change_state(NSVC_S_DEAD_BLOCKED);
+ log("Disabling NSVC on user request");
+ f_change_state(NSVC_S_DISABLED);
+ Tns_test.stop;
+ Tns_alive.stop;
+ }
+
/* transition to DEAD if t_alive times out */
[] Tns_alive.timeout {
log("Tns-alive expired: changing to DEAD_BLOCKED + starting Tns-test");
@@ -618,6 +662,25 @@
}
}
+ private altstep as_disabled() runs on NSVC_CT {
+ [g_config.handle_sns == true] NS_SP.receive(NsCtrlRequest:EnableReq) {
+ f_change_state(NSVC_S_ALIVE_UNBLOCKED);
+ f_sendAlive();
+ Tns_test.start;
+ }
+ [g_config.handle_sns == false] NS_SP.receive(NsCtrlRequest:EnableReq) {
+ f_change_state(NSVC_S_DEAD_BLOCKED);
+ Tns_test.start;
+ }
+ /* drop any received messages while in this state */
+ [] NSCP.receive {
+ log("Dropping inbound NS mesage as NS-VC is disabled");
+ }
+ [] NS_SP.receive {
+ log("Dropping user primitive as NS-VC is disabled");
+ }
+ }
+
private altstep as_handle_reset() runs on NSVC_CT {
var PDU_NS rf;
@@ -808,7 +871,8 @@
[vc_state == NSVC_S_WAIT_RESET] as_wait_reset();
[vc_state == NSVC_S_ALIVE_BLOCKED] as_alive_blocked();
[vc_state == NSVC_S_ALIVE_UNBLOCKED] as_alive_unblocked();
- [] as_allstate();
+ [vc_state == NSVC_S_DISABLED] as_disabled();
+ [vc_state != NSVC_S_DISABLED] as_allstate();
}
}
}
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22315
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I742ecf01de15e3edbf0719371f0217a5739b7c8e
Gerrit-Change-Number: 22315
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210125/26c65c35/attachment.htm>