|
@@ -346,22 +346,30 @@ static int l2tp_nl_tunnel_send(struct sk_buff *skb, u32 portid, u32 seq, int fla
|
|
if (nest == NULL)
|
|
if (nest == NULL)
|
|
goto nla_put_failure;
|
|
goto nla_put_failure;
|
|
|
|
|
|
- if (nla_put_u64(skb, L2TP_ATTR_TX_PACKETS,
|
|
|
|
- atomic_long_read(&tunnel->stats.tx_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_TX_BYTES,
|
|
|
|
- atomic_long_read(&tunnel->stats.tx_bytes)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_TX_ERRORS,
|
|
|
|
- atomic_long_read(&tunnel->stats.tx_errors)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_PACKETS,
|
|
|
|
- atomic_long_read(&tunnel->stats.rx_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_BYTES,
|
|
|
|
- atomic_long_read(&tunnel->stats.rx_bytes)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_SEQ_DISCARDS,
|
|
|
|
- atomic_long_read(&tunnel->stats.rx_seq_discards)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_OOS_PACKETS,
|
|
|
|
- atomic_long_read(&tunnel->stats.rx_oos_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_ERRORS,
|
|
|
|
- atomic_long_read(&tunnel->stats.rx_errors)))
|
|
|
|
|
|
+ if (nla_put_u64_64bit(skb, L2TP_ATTR_TX_PACKETS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.tx_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_TX_BYTES,
|
|
|
|
+ atomic_long_read(&tunnel->stats.tx_bytes),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_TX_ERRORS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.tx_errors),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_PACKETS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.rx_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_BYTES,
|
|
|
|
+ atomic_long_read(&tunnel->stats.rx_bytes),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_SEQ_DISCARDS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.rx_seq_discards),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_OOS_PACKETS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.rx_oos_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_ERRORS,
|
|
|
|
+ atomic_long_read(&tunnel->stats.rx_errors),
|
|
|
|
+ L2TP_ATTR_STATS_PAD))
|
|
goto nla_put_failure;
|
|
goto nla_put_failure;
|
|
nla_nest_end(skb, nest);
|
|
nla_nest_end(skb, nest);
|
|
|
|
|
|
@@ -754,22 +762,30 @@ static int l2tp_nl_session_send(struct sk_buff *skb, u32 portid, u32 seq, int fl
|
|
if (nest == NULL)
|
|
if (nest == NULL)
|
|
goto nla_put_failure;
|
|
goto nla_put_failure;
|
|
|
|
|
|
- if (nla_put_u64(skb, L2TP_ATTR_TX_PACKETS,
|
|
|
|
- atomic_long_read(&session->stats.tx_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_TX_BYTES,
|
|
|
|
- atomic_long_read(&session->stats.tx_bytes)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_TX_ERRORS,
|
|
|
|
- atomic_long_read(&session->stats.tx_errors)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_PACKETS,
|
|
|
|
- atomic_long_read(&session->stats.rx_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_BYTES,
|
|
|
|
- atomic_long_read(&session->stats.rx_bytes)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_SEQ_DISCARDS,
|
|
|
|
- atomic_long_read(&session->stats.rx_seq_discards)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_OOS_PACKETS,
|
|
|
|
- atomic_long_read(&session->stats.rx_oos_packets)) ||
|
|
|
|
- nla_put_u64(skb, L2TP_ATTR_RX_ERRORS,
|
|
|
|
- atomic_long_read(&session->stats.rx_errors)))
|
|
|
|
|
|
+ if (nla_put_u64_64bit(skb, L2TP_ATTR_TX_PACKETS,
|
|
|
|
+ atomic_long_read(&session->stats.tx_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_TX_BYTES,
|
|
|
|
+ atomic_long_read(&session->stats.tx_bytes),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_TX_ERRORS,
|
|
|
|
+ atomic_long_read(&session->stats.tx_errors),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_PACKETS,
|
|
|
|
+ atomic_long_read(&session->stats.rx_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_BYTES,
|
|
|
|
+ atomic_long_read(&session->stats.rx_bytes),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_SEQ_DISCARDS,
|
|
|
|
+ atomic_long_read(&session->stats.rx_seq_discards),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_OOS_PACKETS,
|
|
|
|
+ atomic_long_read(&session->stats.rx_oos_packets),
|
|
|
|
+ L2TP_ATTR_STATS_PAD) ||
|
|
|
|
+ nla_put_u64_64bit(skb, L2TP_ATTR_RX_ERRORS,
|
|
|
|
+ atomic_long_read(&session->stats.rx_errors),
|
|
|
|
+ L2TP_ATTR_STATS_PAD))
|
|
goto nla_put_failure;
|
|
goto nla_put_failure;
|
|
nla_nest_end(skb, nest);
|
|
nla_nest_end(skb, nest);
|
|
|
|
|