summaryrefslogtreecommitdiff
path: root/datapath
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2015-02-06 15:52:06 -0800
committerJesse Gross <jesse@nicira.com>2015-02-20 11:00:31 -0800
commit3dd9bffd29c550e1c34417ff97157a568cfd1dd7 (patch)
tree3ef04dafbd64ed0ec155f6fe73e4591d3ca03dd8 /datapath
parent131971cedf005cfab6bca005289f9aa6f11ebacd (diff)
downloadopenvswitch-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.c32
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)