On Tue, 2018-10-30 at 18:24 +0100, Paolo Abeni wrote:
> --- a/include/net/udp.h
> +++ b/include/net/udp.h
> @@ -406,17 +406,24 @@ static inline int copy_linear_skb(struct sk_buff *skb, 
> int len, int off,
>  } while(0)
>  
>  #if IS_ENABLED(CONFIG_IPV6)
> -#define __UDPX_INC_STATS(sk, field)                                  \
> -do {                                                                 \
> -     if ((sk)->sk_family == AF_INET)                                 \
> -             __UDP_INC_STATS(sock_net(sk), field, 0);                \
> -     else                                                            \
> -             __UDP6_INC_STATS(sock_net(sk), field, 0);               \
> -} while (0)
> +#define __UDPX_MIB(sk, ipv4)                                         \
> +({                                                                   \
> +     ipv4 ? (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics : \
> +                              sock_net(sk)->mib.udp_statistics) :    \
> +             (IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_stats_in6 : \
> +                              sock_net(sk)->mib.udp_stats_in6);      \
> +})
>  #else
> -#define __UDPX_INC_STATS(sk, field) __UDP_INC_STATS(sock_net(sk), field, 0)
> +#define __UDPX_MIB(sk, ipv4)                                         \
> +({                                                                   \
> +     IS_UDPLITE(sk) ? sock_net(sk)->mib.udplite_statistics :         \
> +                      sock_net(sk)->mib.udp_statistics;              \
> +})
>  #endif
>  
> +#define __UDPX_INC_STATS(sk, field) \
> +     __SNMP_INC_STATS(__UDPX_MIB(sk, (sk)->sk_family == AF_INET, field)
> +

This is broken (complains only if CONFIG_AF_RXRPC is set), will fix in
next iteration (thanks kbuildbot).

But I'd prefer to keep the above helper: it can be used in a follow-up
patch to cleanup a bit udp6_recvmsg().

>  #ifdef CONFIG_PROC_FS
>  struct udp_seq_afinfo {
>       sa_family_t                     family;
> @@ -450,4 +457,32 @@ DECLARE_STATIC_KEY_FALSE(udpv6_encap_needed_key);
>  void udpv6_encap_enable(void);
>  #endif
>  
> +static inline struct sk_buff *udp_rcv_segment(struct sock *sk,
> +                                           struct sk_buff *skb)
> +{
> +     bool ipv4 = skb->protocol == htons(ETH_P_IP);

And this cause a compile warning when # CONFIG_IPV6 is not set, I will
fix in the next iteration (again thanks kbuildbot)

Cheers,

Paolo

Reply via email to