|
@@ -564,7 +564,7 @@ static void vxlan_notify_add_rx_port(struct sock *sk)
|
|
|
struct net_device *dev;
|
|
|
struct net *net = sock_net(sk);
|
|
|
sa_family_t sa_family = sk->sk_family;
|
|
|
- u16 port = htons(inet_sk(sk)->inet_sport);
|
|
|
+ __be16 port = inet_sk(sk)->inet_sport;
|
|
|
|
|
|
rcu_read_lock();
|
|
|
for_each_netdev_rcu(net, dev) {
|
|
@@ -581,7 +581,7 @@ static void vxlan_notify_del_rx_port(struct sock *sk)
|
|
|
struct net_device *dev;
|
|
|
struct net *net = sock_net(sk);
|
|
|
sa_family_t sa_family = sk->sk_family;
|
|
|
- u16 port = htons(inet_sk(sk)->inet_sport);
|
|
|
+ __be16 port = inet_sk(sk)->inet_sport;
|
|
|
|
|
|
rcu_read_lock();
|
|
|
for_each_netdev_rcu(net, dev) {
|
|
@@ -2021,7 +2021,8 @@ static struct device_type vxlan_type = {
|
|
|
};
|
|
|
|
|
|
/* Calls the ndo_add_vxlan_port of the caller in order to
|
|
|
- * supply the listening VXLAN udp ports.
|
|
|
+ * supply the listening VXLAN udp ports. Callers are expected
|
|
|
+ * to implement the ndo_add_vxlan_port.
|
|
|
*/
|
|
|
void vxlan_get_rx_port(struct net_device *dev)
|
|
|
{
|
|
@@ -2029,16 +2030,13 @@ void vxlan_get_rx_port(struct net_device *dev)
|
|
|
struct net *net = dev_net(dev);
|
|
|
struct vxlan_net *vn = net_generic(net, vxlan_net_id);
|
|
|
sa_family_t sa_family;
|
|
|
- u16 port;
|
|
|
- int i;
|
|
|
-
|
|
|
- if (!dev || !dev->netdev_ops || !dev->netdev_ops->ndo_add_vxlan_port)
|
|
|
- return;
|
|
|
+ __be16 port;
|
|
|
+ unsigned int i;
|
|
|
|
|
|
spin_lock(&vn->sock_lock);
|
|
|
for (i = 0; i < PORT_HASH_SIZE; ++i) {
|
|
|
- hlist_for_each_entry_rcu(vs, vs_head(net, i), hlist) {
|
|
|
- port = htons(inet_sk(vs->sock->sk)->inet_sport);
|
|
|
+ hlist_for_each_entry_rcu(vs, &vn->sock_list[i], hlist) {
|
|
|
+ port = inet_sk(vs->sock->sk)->inet_sport;
|
|
|
sa_family = vs->sock->sk->sk_family;
|
|
|
dev->netdev_ops->ndo_add_vxlan_port(dev, sa_family,
|
|
|
port);
|