{
struct amt_header_discovery *amtd;
int hlen, tlen, offset;
- struct socket *sock;
struct udphdr *udph;
struct sk_buff *skb;
struct iphdr *iph;
struct rtable *rt;
struct flowi4 fl4;
+ struct sock *sk;
u32 len;
int err;
rcu_read_lock();
- sock = rcu_dereference(amt->sock);
- if (!sock)
+ sk = rcu_dereference(amt->sk);
+ if (!sk)
goto out;
if (!netif_running(amt->stream_dev) || !netif_running(amt->dev))
goto out;
- rt = ip_route_output_ports(amt->net, &fl4, sock->sk,
+ rt = ip_route_output_ports(amt->net, &fl4, sk,
amt->discovery_ip, amt->local_ip,
amt->gw_port, amt->relay_port,
IPPROTO_UDP, 0,
skb->ip_summed = CHECKSUM_NONE;
ip_select_ident(amt->net, skb, NULL);
ip_send_check(iph);
- err = ip_local_out(amt->net, sock->sk, skb);
+ err = ip_local_out(amt->net, sk, skb);
if (unlikely(net_xmit_eval(err)))
amt->dev->stats.tx_errors++;
{
struct amt_header_request *amtrh;
int hlen, tlen, offset;
- struct socket *sock;
struct udphdr *udph;
struct sk_buff *skb;
struct iphdr *iph;
struct rtable *rt;
struct flowi4 fl4;
+ struct sock *sk;
u32 len;
int err;
rcu_read_lock();
- sock = rcu_dereference(amt->sock);
- if (!sock)
+ sk = rcu_dereference(amt->sk);
+ if (!sk)
goto out;
if (!netif_running(amt->stream_dev) || !netif_running(amt->dev))
goto out;
- rt = ip_route_output_ports(amt->net, &fl4, sock->sk,
+ rt = ip_route_output_ports(amt->net, &fl4, sk,
amt->remote_ip, amt->local_ip,
amt->gw_port, amt->relay_port,
IPPROTO_UDP, 0,
skb->ip_summed = CHECKSUM_NONE;
ip_select_ident(amt->net, skb, NULL);
ip_send_check(iph);
- err = ip_local_out(amt->net, sock->sk, skb);
+ err = ip_local_out(amt->net, sk, skb);
if (unlikely(net_xmit_eval(err)))
amt->dev->stats.tx_errors++;
bool v6)
{
struct amt_header_membership_update *amtmu;
- struct socket *sock;
struct iphdr *iph;
struct flowi4 fl4;
struct rtable *rt;
+ struct sock *sk;
int err;
- sock = rcu_dereference_bh(amt->sock);
- if (!sock)
+ sk = rcu_dereference_bh(amt->sk);
+ if (!sk)
return true;
err = skb_cow_head(skb, LL_RESERVED_SPACE(amt->dev) + sizeof(*amtmu) +
skb_set_inner_protocol(skb, htons(ETH_P_IP));
else
skb_set_inner_protocol(skb, htons(ETH_P_IPV6));
- udp_tunnel_xmit_skb(rt, sock->sk, skb,
+ udp_tunnel_xmit_skb(rt, sk, skb,
fl4.saddr,
fl4.daddr,
AMT_TOS,
bool v6)
{
struct amt_header_mcast_data *amtmd;
- struct socket *sock;
struct sk_buff *skb;
struct iphdr *iph;
struct flowi4 fl4;
struct rtable *rt;
+ struct sock *sk;
- sock = rcu_dereference_bh(amt->sock);
- if (!sock)
+ sk = rcu_dereference_bh(amt->sk);
+ if (!sk)
return;
skb = skb_copy_expand(oskb, sizeof(*amtmd) + sizeof(*iph) +
skb_set_inner_protocol(skb, htons(ETH_P_IP));
else
skb_set_inner_protocol(skb, htons(ETH_P_IPV6));
- udp_tunnel_xmit_skb(rt, sock->sk, skb,
+ udp_tunnel_xmit_skb(rt, sk, skb,
fl4.saddr,
fl4.daddr,
AMT_TOS,
bool v6)
{
struct amt_header_membership_query *amtmq;
- struct socket *sock;
struct rtable *rt;
struct flowi4 fl4;
+ struct sock *sk;
int err;
- sock = rcu_dereference_bh(amt->sock);
- if (!sock)
+ sk = rcu_dereference_bh(amt->sk);
+ if (!sk)
return true;
err = skb_cow_head(skb, LL_RESERVED_SPACE(amt->dev) + sizeof(*amtmq) +
skb_set_inner_protocol(skb, htons(ETH_P_IP));
else
skb_set_inner_protocol(skb, htons(ETH_P_IPV6));
- udp_tunnel_xmit_skb(rt, sock->sk, skb,
+ udp_tunnel_xmit_skb(rt, sk, skb,
fl4.saddr,
fl4.daddr,
AMT_TOS,
{
struct amt_header_advertisement *amta;
int hlen, tlen, offset;
- struct socket *sock;
struct udphdr *udph;
struct sk_buff *skb;
struct iphdr *iph;
struct rtable *rt;
struct flowi4 fl4;
+ struct sock *sk;
u32 len;
int err;
rcu_read_lock();
- sock = rcu_dereference(amt->sock);
- if (!sock)
+ sk = rcu_dereference(amt->sk);
+ if (!sk)
goto out;
if (!netif_running(amt->stream_dev) || !netif_running(amt->dev))
goto out;
- rt = ip_route_output_ports(amt->net, &fl4, sock->sk,
+ rt = ip_route_output_ports(amt->net, &fl4, sk,
daddr, amt->local_ip,
dport, amt->relay_port,
IPPROTO_UDP, 0,
skb->ip_summed = CHECKSUM_NONE;
ip_select_ident(amt->net, skb, NULL);
ip_send_check(iph);
- err = ip_local_out(amt->net, sock->sk, skb);
+ err = ip_local_out(amt->net, sk, skb);
if (unlikely(net_xmit_eval(err)))
amt->dev->stats.tx_errors++;
return 0;
}
-static struct socket *amt_create_sock(struct net *net, __be16 port)
+static struct sock *amt_create_sock(struct net *net, __be16 port)
{
struct udp_port_cfg udp_conf;
struct socket *sock;
if (err < 0)
return ERR_PTR(err);
- return sock;
+ return sock->sk;
}
static int amt_socket_create(struct amt_dev *amt)
{
struct udp_tunnel_sock_cfg tunnel_cfg;
- struct socket *sock;
+ struct sock *sk;
- sock = amt_create_sock(amt->net, amt->relay_port);
- if (IS_ERR(sock))
- return PTR_ERR(sock);
+ sk = amt_create_sock(amt->net, amt->relay_port);
+ if (IS_ERR(sk))
+ return PTR_ERR(sk);
/* Mark socket as an encapsulation socket */
memset(&tunnel_cfg, 0, sizeof(tunnel_cfg));
tunnel_cfg.encap_rcv = amt_rcv;
tunnel_cfg.encap_err_lookup = amt_err_lookup;
tunnel_cfg.encap_destroy = NULL;
- setup_udp_tunnel_sock(amt->net, sock->sk, &tunnel_cfg);
+ setup_udp_tunnel_sock(amt->net, sk, &tunnel_cfg);
- rcu_assign_pointer(amt->sock, sock);
+ rcu_assign_pointer(amt->sk, sk);
return 0;
}
{
struct amt_dev *amt = netdev_priv(dev);
struct amt_tunnel_list *tunnel, *tmp;
- struct socket *sock;
struct sk_buff *skb;
+ struct sock *sk;
int i;
cancel_delayed_work_sync(&amt->req_wq);
cancel_delayed_work_sync(&amt->secret_wq);
/* shutdown */
- sock = rtnl_dereference(amt->sock);
- RCU_INIT_POINTER(amt->sock, NULL);
+ sk = rtnl_dereference(amt->sk);
+ RCU_INIT_POINTER(amt->sk, NULL);
synchronize_net();
- if (sock)
- udp_tunnel_sock_release(sock->sk);
+ if (sk)
+ udp_tunnel_sock_release(sk);
cancel_work_sync(&amt->event_wq);
for (i = 0; i < AMT_MAX_EVENTS; i++) {