diff options
author | Jesse Gross <jesse@nicira.com> | 2015-02-06 15:52:06 -0800 |
---|---|---|
committer | Jesse Gross <jesse@nicira.com> | 2015-02-20 11:00:31 -0800 |
commit | 3dd9bffd29c550e1c34417ff97157a568cfd1dd7 (patch) | |
tree | 3ef04dafbd64ed0ec155f6fe73e4591d3ca03dd8 /datapath | |
parent | 131971cedf005cfab6bca005289f9aa6f11ebacd (diff) | |
download | openvswitch-3dd9bffd29c550e1c34417ff97157a568cfd1dd7.tar.gz |
datapath: Use udp_sock_create() for LISP.
Use the common udp_sock_create() for LISP, similar to what was
done for VXLAN.
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Thomas Graf <tgraf@noironetworks.com>
Diffstat (limited to 'datapath')
-rw-r--r-- | datapath/vport-lisp.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c index db4d06fee..c7f8a9a34 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) |