[ovs-dev] [PATCH 04/14] datapath: Use udp_sock_create() for LISP.
Jesse Gross
jesse at nicira.com
Thu Feb 19 03:02:14 UTC 2015
Use the common udp_sock_create() for LISP, similar to what was
done for VXLAN.
Signed-off-by: Jesse Gross <jesse at nicira.com>
---
datapath/vport-lisp.c | 32 +++++++++++---------------------
1 file changed, 11 insertions(+), 21 deletions(-)
diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c
index db4d06f..c7f8a9a 100644
--- a/datapath/vport-lisp.c
+++ b/datapath/vport-lisp.c
@@ -31,6 +31,7 @@
#include <net/ip.h>
#include <net/route.h>
#include <net/udp.h>
+#include <net/udp_tunnel.h>
#include <net/xfrm.h>
#include "datapath.h"
@@ -291,25 +292,20 @@ out:
#define UDP_ENCAP_LISP 1
static int lisp_socket_init(struct lisp_port *lisp_port, struct net *net)
{
- struct sockaddr_in sin;
+ struct udp_port_cfg udp_conf;
int err;
- err = sock_create_kern(AF_INET, SOCK_DGRAM, 0,
- &lisp_port->lisp_rcv_socket);
- if (err)
- goto error;
-
- /* release net ref. */
- sk_change_net(lisp_port->lisp_rcv_socket->sk, net);
+ memset(&udp_conf, 0, sizeof(udp_conf));
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = htonl(INADDR_ANY);
- sin.sin_port = lisp_port->dst_port;
+ udp_conf.family = AF_INET;
+ udp_conf.local_ip.s_addr = htonl(INADDR_ANY);
+ udp_conf.local_udp_port = lisp_port->dst_port;
- err = kernel_bind(lisp_port->lisp_rcv_socket, (struct sockaddr *)&sin,
- sizeof(struct sockaddr_in));
- if (err)
- goto error_sock;
+ err = udp_sock_create(net, &udp_conf, &lisp_port->lisp_rcv_socket);
+ if (err < 0) {
+ pr_warn("cannot register lisp protocol handler: %d\n", err);
+ return err;
+ }
udp_sk(lisp_port->lisp_rcv_socket->sk)->encap_type = UDP_ENCAP_LISP;
udp_sk(lisp_port->lisp_rcv_socket->sk)->encap_rcv = lisp_rcv;
@@ -317,12 +313,6 @@ static int lisp_socket_init(struct lisp_port *lisp_port, struct net *net)
udp_encap_enable();
return 0;
-
-error_sock:
- sk_release_kernel(lisp_port->lisp_rcv_socket->sk);
-error:
- pr_warn("cannot register lisp protocol handler: %d\n", err);
- return err;
}
static int lisp_get_options(const struct vport *vport, struct sk_buff *skb)
--
1.9.1
More information about the dev
mailing list