diff options
| author | David S. Miller <davem@davemloft.net> | 2018-07-07 10:58:50 +0900 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-07-07 10:58:50 +0900 |
| commit | 9ebcb397aaaf6a18d35db0168375e183e9170f53 (patch) | |
| tree | 9ab9ed3c9a6a5018df2faec2dab0b896aacd3bca /include/net/ip.h | |
| parent | ab8565af68001ac5f9331daa311938ead3eb5636 (diff) | |
| parent | fbf47813607ba8c4e5c5b81da3c47fc66ac314b1 (diff) | |
Merge branch 'sock-cookie-initializers'
Willem de Bruijn says:
====================
sock cookie initializers
Recent UDP GSO and SO_TXTIME features added new fields to cookie
structs.
When adding a field, all sites where a struct is initialized have to
be updated, which is a lot of boilerplate. Alternatively, a field can
be initialized selectively, but this is fragile. I introduced a bug
in udp gso where an uninitialized field was read. See also fix commit
("9887cba19978 ip: limit use of gso_size to udp").
Introduce initializers for structs ipcm(6)_cookie and sockc_cookie.
patch 1..3 do exactly this.
patch 4..5 make ipv4 and ipv6 handle cookies the same way and
remove some boilerplate in doing so.
patch 6 removes the udp gso branch that needed the above fix
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/ip.h')
| -rw-r--r-- | include/net/ip.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/net/ip.h b/include/net/ip.h index 99d1b835d2aa..e44b1a44f67a 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -72,13 +72,27 @@ struct ipcm_cookie { __be32 addr; int oif; struct ip_options_rcu *opt; - __u8 tx_flags; __u8 ttl; __s16 tos; char priority; __u16 gso_size; }; +static inline void ipcm_init(struct ipcm_cookie *ipcm) +{ + *ipcm = (struct ipcm_cookie) { .tos = -1 }; +} + +static inline void ipcm_init_sk(struct ipcm_cookie *ipcm, + const struct inet_sock *inet) +{ + ipcm_init(ipcm); + + ipcm->sockc.tsflags = inet->sk.sk_tsflags; + ipcm->oif = inet->sk.sk_bound_dev_if; + ipcm->addr = inet->inet_saddr; +} + #define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb)) #define PKTINFO_SKB_CB(skb) ((struct in_pktinfo *)((skb)->cb)) |
