summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-01-26 06:35:08 +0000
committerBernard Xiong <[email protected]>2015-01-26 06:35:08 +0000
commit15231efaffb0a916e5d084f5cc59830faf873dd6 (patch)
tree2b5a7cee8efd0214f71c6b20a2c596f010126813 /components
parent1512da3b03be76c3b0483c6ff16bc9093f2b20dd (diff)
[lwIP] Add IPv4 input hook
Diffstat (limited to 'components')
-rw-r--r--components/net/lwip-1.4.1/src/arch/sys_arch.c20
-rw-r--r--components/net/lwip-1.4.1/src/lwipopts.h8
2 files changed, 28 insertions, 0 deletions
diff --git a/components/net/lwip-1.4.1/src/arch/sys_arch.c b/components/net/lwip-1.4.1/src/arch/sys_arch.c
index 287c861f04..c94b54dd1d 100644
--- a/components/net/lwip-1.4.1/src/arch/sys_arch.c
+++ b/components/net/lwip-1.4.1/src/arch/sys_arch.c
@@ -601,6 +601,26 @@ u32_t sys_now(void)
return rt_tick_get() * (1000 / RT_TICK_PER_SECOND);
}
+/*
+ * lwIP IPv4 input hook
+ */
+#ifdef LWIP_USING_IP4INPUT_HOOK
+static int (*_lwip_ip_input_hook)(struct pbuf *p, struct netif *inp) = RT_NULL;
+
+void lwip_ip_input_set_hook(int (*hook)(struct pbuf *p, struct netif *inp))
+{
+ _lwip_ip_input_hook = hook;
+}
+
+int lwip_ip_input_hook(struct pbuf *p, struct netif *inp)
+{
+ if (_lwip_ip_input_hook != RT_NULL)
+ return _lwip_ip_input_hook(p, inp);
+
+ return 0;
+}
+#endif
+
#ifdef RT_LWIP_PPP
u32_t sio_read(sio_fd_t fd, u8_t *buf, u32_t size)
{
diff --git a/components/net/lwip-1.4.1/src/lwipopts.h b/components/net/lwip-1.4.1/src/lwipopts.h
index bff172e280..edae3163c3 100644
--- a/components/net/lwip-1.4.1/src/lwipopts.h
+++ b/components/net/lwip-1.4.1/src/lwipopts.h
@@ -161,6 +161,14 @@
*/
#define SYS_LIGHTWEIGHT_PROT (NO_SYS==0)
+#ifdef LWIP_USING_IP4INPUT_HOOK
+struct pbuf;
+struct netif;
+int lwip_ip_input_hook(struct pbuf *p, struct netif *inp);
+
+#define LWIP_HOOK_IP4_INPUT lwip_ip_input_hook
+#endif
+
/* ---------- TCP options ---------- */
#ifdef RT_LWIP_TCP
#define LWIP_TCP 1