laforge has uploaded this change for review. (
https://gerrit.osmocom.org/c/dahdi-linux/+/34012 )
Change subject: trunkdev: Implement DAHDI_MAINT_{LOCAL,NETWORKPAYLOAD}LOOP
......................................................................
trunkdev: Implement DAHDI_MAINT_{LOCAL,NETWORKPAYLOAD}LOOP
Using those maintenance modes we can test the local (DAHDI channel)
and remote (trunkdev) sides indepdendent from each other.
Change-Id: I12cf9647fb6def38865aaac8ad6bbb58ebf7b5fd
---
M drivers/dahdi/trunkdev/trunkdev.c
1 file changed, 64 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/dahdi-linux refs/changes/12/34012/1
diff --git a/drivers/dahdi/trunkdev/trunkdev.c b/drivers/dahdi/trunkdev/trunkdev.c
index 339b9d0..f185c53 100644
--- a/drivers/dahdi/trunkdev/trunkdev.c
+++ b/drivers/dahdi/trunkdev/trunkdev.c
@@ -161,6 +161,35 @@
return 0;
}
+static const char *maint2str(int cmd)
+{
+ switch (cmd) {
+ case DAHDI_MAINT_NONE: return "NONE";
+ case DAHDI_MAINT_LOCALLOOP: return "LOCALLOOP";
+ case DAHDI_MAINT_NETWORKPAYLOADLOOP: return "NETWORKPAYLOADLOOP";
+ default: return "UNKNOWN";
+ }
+}
+
+static int td_d_maint(struct dahdi_span *span, int cmd)
+{
+ struct dahdi_trunkdev *td = container_of(span, struct dahdi_trunkdev, dahdi.span);
+
+ switch (cmd) {
+ case DAHDI_MAINT_NONE:
+ case DAHDI_MAINT_LOCALLOOP:
+ case DAHDI_MAINT_NETWORKPAYLOADLOOP:
+ /* we don't need to do anything, as span->maintstat is set by the core,
+ * just acknowledge those supported modes here */
+ dev_info(&td->dahdi.dev->dev, "Setting maintenance mode to: %s\n",
maint2str(cmd));
+ break;
+ default:
+ return -ENOSYS;
+ }
+ return 0;
+}
+
+
/* called in hard_irq context with chan_lock held */
static void td_d_sync_tick(struct dahdi_span *span, int is_master)
{
@@ -178,14 +207,29 @@
uint8_t frame[32];
int rc;
- /* Trunk -> DAHDI direction */
- rc = frame_fifo_out(&td->from_trunk, frame);
- if (rc >= 0)
- _span_demux_one_frame(td, frame);
+ switch (span->maintstat) {
+ case DAHDI_MAINT_NONE:
+ /* Trunk -> DAHDI direction */
+ rc = frame_fifo_out(&td->from_trunk, frame);
+ if (rc >= 0)
+ _span_demux_one_frame(td, frame);
- /* Trunk <- DAHDI direction */
- _span_mux_one_frame(td, frame);
- frame_fifo_in(&td->to_trunk, frame);
+ /* Trunk <- DAHDI direction */
+ _span_mux_one_frame(td, frame);
+ frame_fifo_in(&td->to_trunk, frame);
+ break;
+ case DAHDI_MAINT_LOCALLOOP:
+ /* Loop frame from DAHDI back to itself */
+ _span_mux_one_frame(td, frame);
+ _span_demux_one_frame(td, frame);
+ break;
+ case DAHDI_MAINT_NETWORKPAYLOADLOOP:
+ /* Loop frame from trunkdev back to itself */
+ rc = frame_fifo_out(&td->from_trunk, frame);
+ if (rc >= 0)
+ frame_fifo_in(&td->to_trunk, frame);
+ break;
+ }
}
/* wake up any processes doing blocking read or waiting in poll */
wake_up_interruptible(&td->waitq);
@@ -197,7 +241,7 @@
.chanconfig = td_d_chanconfig,
.startup = td_d_startup,
.shutdown = td_d_shutdown,
- //.maint = td_d_maint,
+ .maint = td_d_maint,
.sync_tick = td_d_sync_tick,
};
--
To view, visit
https://gerrit.osmocom.org/c/dahdi-linux/+/34012
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: dahdi-linux
Gerrit-Branch: master
Gerrit-Change-Id: I12cf9647fb6def38865aaac8ad6bbb58ebf7b5fd
Gerrit-Change-Number: 34012
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange