summaryrefslogtreecommitdiffstats
path: root/router.c
diff options
context:
space:
mode:
authorManuel Bachmann <manuel.bachmann@iot.bzh>2016-06-13 10:11:28 +0200
committerYannick Gicquel <yannick.gicquel@iot.bzh>2016-10-11 17:09:07 +0200
commit6fc3e02df9de8347eb76fdfd26ed781686d37b6c (patch)
treea291b1fa88b957941e9abd3baee01df26ebf4177 /router.c
parentd126c05ba201b0fd6daabf7c03d05da3db1b2957 (diff)
Clean up node status after sink_input unlink
We now unload all modules associated with a node when it disappears. Change-Id: I6d2055d546c9cc1b1967f85c973eafcc216bc91f Signed-off-by: Manuel Bachmann <manuel.bachmann@iot.bzh>
Diffstat (limited to 'router.c')
-rw-r--r--router.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/router.c b/router.c
index 855f9f8..2478ab2 100644
--- a/router.c
+++ b/router.c
@@ -84,6 +84,22 @@ void pa_router_done (struct userdata *u)
}
}
+void agl_router_register_node (struct userdata *u, agl_node *node)
+{
+ pa_assert (u);
+ pa_assert (node);
+
+ implement_default_route (u, node, NULL, pa_utils_new_stamp ());
+}
+
+void agl_router_unregister_node (struct userdata *u, agl_node *node)
+{
+ pa_assert (u);
+ pa_assert (node);
+
+ remove_routes (u, node, NULL, pa_utils_new_stamp ());
+}
+
agl_node *agl_router_make_prerouting (struct userdata *u, agl_node *data)
{
pa_router *router;
@@ -196,3 +212,12 @@ agl_node *find_default_route (struct userdata *u, agl_node *start, uint32_t stam
return NULL;
}
+
+void remove_routes (struct userdata *u, agl_node *start, agl_node *end, uint32_t stamp)
+{
+ if (start->direction == agl_input) {
+ agl_switch_teardown_link (u, start, end);
+ } else {
+ agl_switch_teardown_link (u, end, start);
+ }
+}