From c32d1ba76f8222bee1a0340009bee302df9025fb Mon Sep 17 00:00:00 2001 From: Tomas 'ZeXx86' Jedrzejek Date: Mon, 22 Jun 2009 20:22:05 +0200 Subject: [PATCH] Added support for broadcast packets into UDPv4 --- kernel/core/net/udp.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/kernel/core/net/udp.c b/kernel/core/net/udp.c index f27baa6..b891c68 100644 --- a/kernel/core/net/udp.c +++ b/kernel/core/net/udp.c @@ -543,16 +543,28 @@ proto_udp_conn_t *net_proto_udp_conn_check (net_ipv4 ip_source, net_port port_so proto_udp_conn_t *conn = NULL; proto_udp_conn_t *conn_ret = NULL; - for (conn = proto_udp_conn_list.next; conn != &proto_udp_conn_list; conn = conn->next) { - if (conn->ip_source == ip_source && conn->port_source == port_source) { - if (conn->ip_dest == ip_dest /*&& conn->port_dest == port_dest*/) { + if (conn->ip_dest != INADDR_BROADCAST) { + for (conn = proto_udp_conn_list.next; conn != &proto_udp_conn_list; conn = conn->next) { + if (conn->ip_source == ip_source && conn->port_source == port_source) { + if (conn->ip_dest == ip_dest) { + *ret = 2; + return conn; + } + + *ret = 1; + + conn_ret = conn; + } + } + } else { /* broadcast packet */ + for (conn = proto_udp_conn_list.next; conn != &proto_udp_conn_list; conn = conn->next) { + if (conn->port_source == port_source && conn->port_dest == port_dest) { + conn->ip_source = ip_dest; + conn->ip_dest = ip_source; + *ret = 2; return conn; } - - *ret = 1; - - conn_ret = conn; } } -- 2.11.4.GIT