diff options
| -rw-r--r-- | include/net/inet_sock.h | 1 | ||||
| -rw-r--r-- | include/net/ip.h | 1 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 3 | ||||
| -rw-r--r-- | net/ipv4/ping.c | 2 | ||||
| -rw-r--r-- | net/ipv4/raw.c | 4 | ||||
| -rw-r--r-- | net/ipv4/udp.c | 2 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 3 | ||||
| -rw-r--r-- | net/ipv6/raw.c | 4 | ||||
| -rw-r--r-- | net/ipv6/udp.c | 3 |
9 files changed, 15 insertions, 8 deletions
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h index 7769c9b36d75..34c4436fd18f 100644 --- a/include/net/inet_sock.h +++ b/include/net/inet_sock.h | |||
| @@ -160,6 +160,7 @@ struct inet_cork { | |||
| 160 | char priority; | 160 | char priority; |
| 161 | __u16 gso_size; | 161 | __u16 gso_size; |
| 162 | u64 transmit_time; | 162 | u64 transmit_time; |
| 163 | u32 mark; | ||
| 163 | }; | 164 | }; |
| 164 | 165 | ||
| 165 | struct inet_cork_full { | 166 | struct inet_cork_full { |
diff --git a/include/net/ip.h b/include/net/ip.h index 29d89de39822..95bb77f95bcc 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
| @@ -88,6 +88,7 @@ static inline void ipcm_init_sk(struct ipcm_cookie *ipcm, | |||
| 88 | { | 88 | { |
| 89 | ipcm_init(ipcm); | 89 | ipcm_init(ipcm); |
| 90 | 90 | ||
| 91 | ipcm->sockc.mark = inet->sk.sk_mark; | ||
| 91 | ipcm->sockc.tsflags = inet->sk.sk_tsflags; | 92 | ipcm->sockc.tsflags = inet->sk.sk_tsflags; |
| 92 | ipcm->oif = inet->sk.sk_bound_dev_if; | 93 | ipcm->oif = inet->sk.sk_bound_dev_if; |
| 93 | ipcm->addr = inet->inet_saddr; | 94 | ipcm->addr = inet->inet_saddr; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index cc7ef0d05bbd..5eb73775c3f7 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -1266,6 +1266,7 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork, | |||
| 1266 | cork->length = 0; | 1266 | cork->length = 0; |
| 1267 | cork->ttl = ipc->ttl; | 1267 | cork->ttl = ipc->ttl; |
| 1268 | cork->tos = ipc->tos; | 1268 | cork->tos = ipc->tos; |
| 1269 | cork->mark = ipc->sockc.mark; | ||
| 1269 | cork->priority = ipc->priority; | 1270 | cork->priority = ipc->priority; |
| 1270 | cork->transmit_time = ipc->sockc.transmit_time; | 1271 | cork->transmit_time = ipc->sockc.transmit_time; |
| 1271 | cork->tx_flags = 0; | 1272 | cork->tx_flags = 0; |
| @@ -1529,7 +1530,7 @@ struct sk_buff *__ip_make_skb(struct sock *sk, | |||
| 1529 | } | 1530 | } |
| 1530 | 1531 | ||
| 1531 | skb->priority = (cork->tos != -1) ? cork->priority: sk->sk_priority; | 1532 | skb->priority = (cork->tos != -1) ? cork->priority: sk->sk_priority; |
| 1532 | skb->mark = sk->sk_mark; | 1533 | skb->mark = cork->mark; |
| 1533 | skb->tstamp = cork->transmit_time; | 1534 | skb->tstamp = cork->transmit_time; |
| 1534 | /* | 1535 | /* |
| 1535 | * Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec | 1536 | * Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec |
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c index 9d24ef5c5d8f..535427292194 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c | |||
| @@ -781,7 +781,7 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 781 | } else if (!ipc.oif) | 781 | } else if (!ipc.oif) |
| 782 | ipc.oif = inet->uc_index; | 782 | ipc.oif = inet->uc_index; |
| 783 | 783 | ||
| 784 | flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, | 784 | flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos, |
| 785 | RT_SCOPE_UNIVERSE, sk->sk_protocol, | 785 | RT_SCOPE_UNIVERSE, sk->sk_protocol, |
| 786 | inet_sk_flowi_flags(sk), faddr, saddr, 0, 0, | 786 | inet_sk_flowi_flags(sk), faddr, saddr, 0, 0, |
| 787 | sk->sk_uid); | 787 | sk->sk_uid); |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 40a6abbc9cf6..80da5a66d5d7 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
| @@ -375,7 +375,7 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4, | |||
| 375 | skb_reserve(skb, hlen); | 375 | skb_reserve(skb, hlen); |
| 376 | 376 | ||
| 377 | skb->priority = sk->sk_priority; | 377 | skb->priority = sk->sk_priority; |
| 378 | skb->mark = sk->sk_mark; | 378 | skb->mark = sockc->mark; |
| 379 | skb->tstamp = sockc->transmit_time; | 379 | skb->tstamp = sockc->transmit_time; |
| 380 | skb_dst_set(skb, &rt->dst); | 380 | skb_dst_set(skb, &rt->dst); |
| 381 | *rtp = NULL; | 381 | *rtp = NULL; |
| @@ -623,7 +623,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 623 | } | 623 | } |
| 624 | } | 624 | } |
| 625 | 625 | ||
| 626 | flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos, | 626 | flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos, |
| 627 | RT_SCOPE_UNIVERSE, | 627 | RT_SCOPE_UNIVERSE, |
| 628 | hdrincl ? IPPROTO_RAW : sk->sk_protocol, | 628 | hdrincl ? IPPROTO_RAW : sk->sk_protocol, |
| 629 | inet_sk_flowi_flags(sk) | | 629 | inet_sk_flowi_flags(sk) | |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index d88821c794fb..fbcd9be3a470 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
| @@ -1130,7 +1130,7 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 1130 | 1130 | ||
| 1131 | fl4 = &fl4_stack; | 1131 | fl4 = &fl4_stack; |
| 1132 | 1132 | ||
| 1133 | flowi4_init_output(fl4, ipc.oif, sk->sk_mark, tos, | 1133 | flowi4_init_output(fl4, ipc.oif, ipc.sockc.mark, tos, |
| 1134 | RT_SCOPE_UNIVERSE, sk->sk_protocol, | 1134 | RT_SCOPE_UNIVERSE, sk->sk_protocol, |
| 1135 | flow_flags, | 1135 | flow_flags, |
| 1136 | faddr, saddr, dport, inet->inet_sport, | 1136 | faddr, saddr, dport, inet->inet_sport, |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 8e49fd62eea9..89a4c7c2e25d 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -1294,6 +1294,7 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork, | |||
| 1294 | cork->base.fragsize = mtu; | 1294 | cork->base.fragsize = mtu; |
| 1295 | cork->base.gso_size = ipc6->gso_size; | 1295 | cork->base.gso_size = ipc6->gso_size; |
| 1296 | cork->base.tx_flags = 0; | 1296 | cork->base.tx_flags = 0; |
| 1297 | cork->base.mark = ipc6->sockc.mark; | ||
| 1297 | sock_tx_timestamp(sk, ipc6->sockc.tsflags, &cork->base.tx_flags); | 1298 | sock_tx_timestamp(sk, ipc6->sockc.tsflags, &cork->base.tx_flags); |
| 1298 | 1299 | ||
| 1299 | if (dst_allfrag(xfrm_dst_path(&rt->dst))) | 1300 | if (dst_allfrag(xfrm_dst_path(&rt->dst))) |
| @@ -1764,7 +1765,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk, | |||
| 1764 | hdr->daddr = *final_dst; | 1765 | hdr->daddr = *final_dst; |
| 1765 | 1766 | ||
| 1766 | skb->priority = sk->sk_priority; | 1767 | skb->priority = sk->sk_priority; |
| 1767 | skb->mark = sk->sk_mark; | 1768 | skb->mark = cork->base.mark; |
| 1768 | 1769 | ||
| 1769 | skb->tstamp = cork->base.transmit_time; | 1770 | skb->tstamp = cork->base.transmit_time; |
| 1770 | 1771 | ||
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 8a6131991e38..6e1888ee4036 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
| @@ -646,7 +646,7 @@ static int rawv6_send_hdrinc(struct sock *sk, struct msghdr *msg, int length, | |||
| 646 | 646 | ||
| 647 | skb->protocol = htons(ETH_P_IPV6); | 647 | skb->protocol = htons(ETH_P_IPV6); |
| 648 | skb->priority = sk->sk_priority; | 648 | skb->priority = sk->sk_priority; |
| 649 | skb->mark = sk->sk_mark; | 649 | skb->mark = sockc->mark; |
| 650 | skb->tstamp = sockc->transmit_time; | 650 | skb->tstamp = sockc->transmit_time; |
| 651 | 651 | ||
| 652 | skb_put(skb, length); | 652 | skb_put(skb, length); |
| @@ -810,6 +810,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 810 | 810 | ||
| 811 | ipcm6_init(&ipc6); | 811 | ipcm6_init(&ipc6); |
| 812 | ipc6.sockc.tsflags = sk->sk_tsflags; | 812 | ipc6.sockc.tsflags = sk->sk_tsflags; |
| 813 | ipc6.sockc.mark = sk->sk_mark; | ||
| 813 | 814 | ||
| 814 | if (sin6) { | 815 | if (sin6) { |
| 815 | if (addr_len < SIN6_LEN_RFC2133) | 816 | if (addr_len < SIN6_LEN_RFC2133) |
| @@ -891,6 +892,7 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 891 | opt = ipv6_fixup_options(&opt_space, opt); | 892 | opt = ipv6_fixup_options(&opt_space, opt); |
| 892 | 893 | ||
| 893 | fl6.flowi6_proto = proto; | 894 | fl6.flowi6_proto = proto; |
| 895 | fl6.flowi6_mark = ipc6.sockc.mark; | ||
| 894 | 896 | ||
| 895 | if (!hdrincl) { | 897 | if (!hdrincl) { |
| 896 | rfv.msg = msg; | 898 | rfv.msg = msg; |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 827fe7385078..2c8beb3896d1 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
| @@ -1230,6 +1230,7 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len) | |||
| 1230 | ipcm6_init(&ipc6); | 1230 | ipcm6_init(&ipc6); |
| 1231 | ipc6.gso_size = up->gso_size; | 1231 | ipc6.gso_size = up->gso_size; |
| 1232 | ipc6.sockc.tsflags = sk->sk_tsflags; | 1232 | ipc6.sockc.tsflags = sk->sk_tsflags; |
| 1233 | ipc6.sockc.mark = sk->sk_mark; | ||
| 1233 | 1234 | ||
| 1234 | /* destination address check */ | 1235 | /* destination address check */ |
| 1235 | if (sin6) { | 1236 | if (sin6) { |
| @@ -1352,7 +1353,7 @@ do_udp_sendmsg: | |||
| 1352 | if (!fl6.flowi6_oif) | 1353 | if (!fl6.flowi6_oif) |
| 1353 | fl6.flowi6_oif = np->sticky_pktinfo.ipi6_ifindex; | 1354 | fl6.flowi6_oif = np->sticky_pktinfo.ipi6_ifindex; |
| 1354 | 1355 | ||
| 1355 | fl6.flowi6_mark = sk->sk_mark; | 1356 | fl6.flowi6_mark = ipc6.sockc.mark; |
| 1356 | fl6.flowi6_uid = sk->sk_uid; | 1357 | fl6.flowi6_uid = sk->sk_uid; |
| 1357 | 1358 | ||
| 1358 | if (msg->msg_controllen) { | 1359 | if (msg->msg_controllen) { |
