net: add infrastructure to un-offload UDP tunnel port
This adds a new NETDEV_UDP_TUNNEL_DROP_INFO event, similar to NETDEV_UDP_TUNNEL_PUSH_INFO, to signal to un-offload ports. This also adds udp_tunnel_drop_rx_port(), which calls ndo_udp_tunnel_del. Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7a27fc6d53
commit
296d8ee37c
|
@ -2317,6 +2317,7 @@ struct netdev_lag_lower_state_info {
|
|||
#define NETDEV_PRECHANGEUPPER 0x001A
|
||||
#define NETDEV_CHANGELOWERSTATE 0x001B
|
||||
#define NETDEV_UDP_TUNNEL_PUSH_INFO 0x001C
|
||||
#define NETDEV_UDP_TUNNEL_DROP_INFO 0x001D
|
||||
#define NETDEV_CHANGE_TX_QUEUE_LEN 0x001E
|
||||
|
||||
int register_netdevice_notifier(struct notifier_block *nb);
|
||||
|
|
|
@ -115,6 +115,8 @@ struct udp_tunnel_info {
|
|||
/* Notify network devices of offloadable types */
|
||||
void udp_tunnel_push_rx_port(struct net_device *dev, struct socket *sock,
|
||||
unsigned short type);
|
||||
void udp_tunnel_drop_rx_port(struct net_device *dev, struct socket *sock,
|
||||
unsigned short type);
|
||||
void udp_tunnel_notify_add_rx_port(struct socket *sock, unsigned short type);
|
||||
void udp_tunnel_notify_del_rx_port(struct socket *sock, unsigned short type);
|
||||
|
||||
|
@ -124,6 +126,12 @@ static inline void udp_tunnel_get_rx_info(struct net_device *dev)
|
|||
call_netdevice_notifiers(NETDEV_UDP_TUNNEL_PUSH_INFO, dev);
|
||||
}
|
||||
|
||||
static inline void udp_tunnel_drop_rx_info(struct net_device *dev)
|
||||
{
|
||||
ASSERT_RTNL();
|
||||
call_netdevice_notifiers(NETDEV_UDP_TUNNEL_DROP_INFO, dev);
|
||||
}
|
||||
|
||||
/* Transmit the skb using UDP encapsulation. */
|
||||
void udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb,
|
||||
__be32 src, __be32 dst, __u8 tos, __u8 ttl,
|
||||
|
|
|
@ -94,6 +94,24 @@ void udp_tunnel_push_rx_port(struct net_device *dev, struct socket *sock,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(udp_tunnel_push_rx_port);
|
||||
|
||||
void udp_tunnel_drop_rx_port(struct net_device *dev, struct socket *sock,
|
||||
unsigned short type)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
struct udp_tunnel_info ti;
|
||||
|
||||
if (!dev->netdev_ops->ndo_udp_tunnel_del ||
|
||||
!(dev->features & NETIF_F_RX_UDP_TUNNEL_PORT))
|
||||
return;
|
||||
|
||||
ti.type = type;
|
||||
ti.sa_family = sk->sk_family;
|
||||
ti.port = inet_sk(sk)->inet_sport;
|
||||
|
||||
dev->netdev_ops->ndo_udp_tunnel_del(dev, &ti);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(udp_tunnel_drop_rx_port);
|
||||
|
||||
/* Notify netdevs that UDP port started listening */
|
||||
void udp_tunnel_notify_add_rx_port(struct socket *sock, unsigned short type)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue