summaryrefslogtreecommitdiff
path: root/app/src/sendpath.c
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2017-05-01 13:36:14 +0800
committerQiuwen Lu <[email protected]>2017-05-01 13:36:14 +0800
commitdf47aa90a826c90528501bb247d305069caeb873 (patch)
tree147701cd2dea53c12e2c3cb4e2079566fd2ec4b5 /app/src/sendpath.c
parent7983e813f1d4ba246e4dccb25835a52fbd098224 (diff)
配合Janus测试,增加普通路由接口,全量收报接口,修正ARP中过滤非广播的请求报文等问题。
Diffstat (limited to 'app/src/sendpath.c')
-rw-r--r--app/src/sendpath.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/app/src/sendpath.c b/app/src/sendpath.c
index 425895e..b98aa93 100644
--- a/app/src/sendpath.c
+++ b/app/src/sendpath.c
@@ -118,6 +118,29 @@ struct mr_sendpath * marsio_sendpath_create_by_droute(struct mr_vdev * dest_devi
return sendpath;
}
+//TODO: 路由表,默认网关实现
+struct mr_sendpath * marsio_sendpath_create_by_route(struct mr_instance * instance, struct in_addr addr)
+{
+ struct mr_vdev * target_vdev = NULL;
+ struct in_addr target_in_addr;
+
+ for (int i = 0; i < instance->nr_vdevs; i++)
+ {
+ struct mr_vdev * vdev = &instance->vdevs[i];
+ struct vdev * __vdev = vdev->vdi->vdev;
+
+ if (!is_same_subnet(addr, __vdev->in_addr, __vdev->in_mask))
+ continue;
+
+ target_in_addr = addr;
+ target_vdev = vdev;
+ }
+
+ if (target_vdev == NULL) return NULL;
+ return marsio_sendpath_create_by_droute(target_vdev, target_in_addr);
+}
+
+
struct mr_sendpath * marsio_sendpath_create_by_vdev(struct mr_vdev * dest_device)
{
struct mr_sendpath * sendpath = malloc(sizeof(struct mr_sendpath));
@@ -127,4 +150,9 @@ struct mr_sendpath * marsio_sendpath_create_by_vdev(struct mr_vdev * dest_device
sendpath->target_vdi = dest_device->vdi;
sendpath->can_use = 1;
return sendpath;
+}
+
+void marsio_sendpath_destory(struct mr_sendpath * sendpath)
+{
+ free(sendpath);
} \ No newline at end of file