diff options
Diffstat (limited to 'net/l2tp/l2tp_netlink.c')
| -rw-r--r-- | net/l2tp/l2tp_netlink.c | 27 | 
1 files changed, 15 insertions, 12 deletions
diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c index 0825ff26e11..0ac907adb2f 100644 --- a/net/l2tp/l2tp_netlink.c +++ b/net/l2tp/l2tp_netlink.c @@ -161,6 +161,13 @@ static int l2tp_nl_cmd_tunnel_create(struct sk_buff *skb, struct genl_info *info  			cfg.peer_udp_port = nla_get_u16(info->attrs[L2TP_ATTR_UDP_DPORT]);  		if (info->attrs[L2TP_ATTR_UDP_CSUM])  			cfg.use_udp_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_CSUM]); + +#if IS_ENABLED(CONFIG_IPV6) +		if (info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_TX]) +			cfg.udp6_zero_tx_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_TX]); +		if (info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_RX]) +			cfg.udp6_zero_rx_checksums = nla_get_flag(info->attrs[L2TP_ATTR_UDP_ZERO_CSUM6_RX]); +#endif  	}  	if (info->attrs[L2TP_ATTR_DEBUG]) @@ -297,8 +304,7 @@ static int l2tp_nl_tunnel_send(struct sk_buff *skb, u32 portid, u32 seq, int fla  	case L2TP_ENCAPTYPE_UDP:  		if (nla_put_u16(skb, L2TP_ATTR_UDP_SPORT, ntohs(inet->inet_sport)) ||  		    nla_put_u16(skb, L2TP_ATTR_UDP_DPORT, ntohs(inet->inet_dport)) || -		    nla_put_u8(skb, L2TP_ATTR_UDP_CSUM, -			       (sk->sk_no_check != UDP_CSUM_NOXMIT))) +		    nla_put_u8(skb, L2TP_ATTR_UDP_CSUM, !sk->sk_no_check_tx))  			goto nla_put_failure;  		/* NOBREAK */  	case L2TP_ENCAPTYPE_IP: @@ -306,8 +312,8 @@ static int l2tp_nl_tunnel_send(struct sk_buff *skb, u32 portid, u32 seq, int fla  		if (np) {  			if (nla_put(skb, L2TP_ATTR_IP6_SADDR, sizeof(np->saddr),  				    &np->saddr) || -			    nla_put(skb, L2TP_ATTR_IP6_DADDR, sizeof(np->daddr), -				    &np->daddr)) +			    nla_put(skb, L2TP_ATTR_IP6_DADDR, sizeof(sk->sk_v6_daddr), +				    &sk->sk_v6_daddr))  				goto nla_put_failure;  		} else  #endif @@ -578,8 +584,10 @@ static int l2tp_nl_cmd_session_modify(struct sk_buff *skb, struct genl_info *inf  	if (info->attrs[L2TP_ATTR_RECV_SEQ])  		session->recv_seq = nla_get_u8(info->attrs[L2TP_ATTR_RECV_SEQ]); -	if (info->attrs[L2TP_ATTR_SEND_SEQ]) +	if (info->attrs[L2TP_ATTR_SEND_SEQ]) {  		session->send_seq = nla_get_u8(info->attrs[L2TP_ATTR_SEND_SEQ]); +		l2tp_session_set_header_len(session, session->tunnel->version); +	}  	if (info->attrs[L2TP_ATTR_LNS_MODE])  		session->lns_mode = nla_get_u8(info->attrs[L2TP_ATTR_LNS_MODE]); @@ -793,7 +801,7 @@ static struct nla_policy l2tp_nl_policy[L2TP_ATTR_MAX + 1] = {  	},  }; -static struct genl_ops l2tp_nl_ops[] = { +static const struct genl_ops l2tp_nl_ops[] = {  	{  		.cmd = L2TP_CMD_NOOP,  		.doit = l2tp_nl_cmd_noop, @@ -887,13 +895,8 @@ EXPORT_SYMBOL_GPL(l2tp_nl_unregister_ops);  static int l2tp_nl_init(void)  { -	int err; -  	pr_info("L2TP netlink interface\n"); -	err = genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops, -					    ARRAY_SIZE(l2tp_nl_ops)); - -	return err; +	return genl_register_family_with_ops(&l2tp_nl_family, l2tp_nl_ops);  }  static void l2tp_nl_cleanup(void)  | 
