diff options
-rw-r--r-- | include/asm-alpha/socket.h | 2 | ||||
-rw-r--r-- | include/asm-arm/socket.h | 2 | ||||
-rw-r--r-- | include/asm-avr32/socket.h | 2 | ||||
-rw-r--r-- | include/asm-blackfin/socket.h | 3 | ||||
-rw-r--r-- | include/asm-cris/socket.h | 2 | ||||
-rw-r--r-- | include/asm-frv/socket.h | 2 | ||||
-rw-r--r-- | include/asm-h8300/socket.h | 2 | ||||
-rw-r--r-- | include/asm-ia64/socket.h | 2 | ||||
-rw-r--r-- | include/asm-m32r/socket.h | 2 | ||||
-rw-r--r-- | include/asm-m68k/socket.h | 2 | ||||
-rw-r--r-- | include/asm-mips/socket.h | 2 | ||||
-rw-r--r-- | include/asm-parisc/socket.h | 2 | ||||
-rw-r--r-- | include/asm-powerpc/socket.h | 2 | ||||
-rw-r--r-- | include/asm-s390/socket.h | 2 | ||||
-rw-r--r-- | include/asm-sh/socket.h | 2 | ||||
-rw-r--r-- | include/asm-sparc/socket.h | 2 | ||||
-rw-r--r-- | include/asm-sparc64/socket.h | 1 | ||||
-rw-r--r-- | include/asm-v850/socket.h | 2 | ||||
-rw-r--r-- | include/asm-x86/socket.h | 2 | ||||
-rw-r--r-- | include/asm-xtensa/socket.h | 2 | ||||
-rw-r--r-- | include/net/route.h | 2 | ||||
-rw-r--r-- | include/net/sock.h | 2 | ||||
-rw-r--r-- | net/core/sock.c | 11 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 3 | ||||
-rw-r--r-- | net/ipv4/raw.c | 2 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 2 | ||||
-rw-r--r-- | net/ipv6/raw.c | 3 |
27 files changed, 65 insertions, 0 deletions
diff --git a/include/asm-alpha/socket.h b/include/asm-alpha/socket.h index 1fede7f92860..08c979319929 100644 --- a/include/asm-alpha/socket.h +++ b/include/asm-alpha/socket.h | |||
@@ -60,4 +60,6 @@ | |||
60 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 20 | 60 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 20 |
61 | #define SO_SECURITY_ENCRYPTION_NETWORK 21 | 61 | #define SO_SECURITY_ENCRYPTION_NETWORK 21 |
62 | 62 | ||
63 | #define SO_MARK 36 | ||
64 | |||
63 | #endif /* _ASM_SOCKET_H */ | 65 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-arm/socket.h b/include/asm-arm/socket.h index 65a1a64bf934..6817be9573a6 100644 --- a/include/asm-arm/socket.h +++ b/include/asm-arm/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-avr32/socket.h b/include/asm-avr32/socket.h index a0d0507a5034..35863f260929 100644 --- a/include/asm-avr32/socket.h +++ b/include/asm-avr32/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* __ASM_AVR32_SOCKET_H */ | 57 | #endif /* __ASM_AVR32_SOCKET_H */ |
diff --git a/include/asm-blackfin/socket.h b/include/asm-blackfin/socket.h index 5213c9652186..2ca702e44d47 100644 --- a/include/asm-blackfin/socket.h +++ b/include/asm-blackfin/socket.h | |||
@@ -50,4 +50,7 @@ | |||
50 | #define SO_PASSSEC 34 | 50 | #define SO_PASSSEC 34 |
51 | #define SO_TIMESTAMPNS 35 | 51 | #define SO_TIMESTAMPNS 35 |
52 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 52 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
53 | |||
54 | #define SO_MARK 36 | ||
55 | |||
53 | #endif /* _ASM_SOCKET_H */ | 56 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-cris/socket.h b/include/asm-cris/socket.h index 5b18dfdf1748..9df0ca82f5de 100644 --- a/include/asm-cris/socket.h +++ b/include/asm-cris/socket.h | |||
@@ -54,6 +54,8 @@ | |||
54 | #define SO_TIMESTAMPNS 35 | 54 | #define SO_TIMESTAMPNS 35 |
55 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 55 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
56 | 56 | ||
57 | #define SO_MARK 36 | ||
58 | |||
57 | #endif /* _ASM_SOCKET_H */ | 59 | #endif /* _ASM_SOCKET_H */ |
58 | 60 | ||
59 | 61 | ||
diff --git a/include/asm-frv/socket.h b/include/asm-frv/socket.h index a823befd11dd..e51ca67b9356 100644 --- a/include/asm-frv/socket.h +++ b/include/asm-frv/socket.h | |||
@@ -52,5 +52,7 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
56 | 58 | ||
diff --git a/include/asm-h8300/socket.h b/include/asm-h8300/socket.h index 39911d8c9684..da2520dbf254 100644 --- a/include/asm-h8300/socket.h +++ b/include/asm-h8300/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-ia64/socket.h b/include/asm-ia64/socket.h index 9e42ce43cfbe..d5ef0aa3e312 100644 --- a/include/asm-ia64/socket.h +++ b/include/asm-ia64/socket.h | |||
@@ -61,4 +61,6 @@ | |||
61 | #define SO_TIMESTAMPNS 35 | 61 | #define SO_TIMESTAMPNS 35 |
62 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 62 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
63 | 63 | ||
64 | #define SO_MARK 36 | ||
65 | |||
64 | #endif /* _ASM_IA64_SOCKET_H */ | 66 | #endif /* _ASM_IA64_SOCKET_H */ |
diff --git a/include/asm-m32r/socket.h b/include/asm-m32r/socket.h index 793d5d30c850..9a0e20012224 100644 --- a/include/asm-m32r/socket.h +++ b/include/asm-m32r/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_M32R_SOCKET_H */ | 57 | #endif /* _ASM_M32R_SOCKET_H */ |
diff --git a/include/asm-m68k/socket.h b/include/asm-m68k/socket.h index 6d21b90863ad..dbc64e92c41a 100644 --- a/include/asm-m68k/socket.h +++ b/include/asm-m68k/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-mips/socket.h b/include/asm-mips/socket.h index 95945689b1c6..63f60254d308 100644 --- a/include/asm-mips/socket.h +++ b/include/asm-mips/socket.h | |||
@@ -73,6 +73,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */ | |||
73 | #define SO_TIMESTAMPNS 35 | 73 | #define SO_TIMESTAMPNS 35 |
74 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 74 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
75 | 75 | ||
76 | #define SO_MARK 36 | ||
77 | |||
76 | #ifdef __KERNEL__ | 78 | #ifdef __KERNEL__ |
77 | 79 | ||
78 | /** sock_type - Socket types | 80 | /** sock_type - Socket types |
diff --git a/include/asm-parisc/socket.h b/include/asm-parisc/socket.h index 99e868f6a8f5..69a7a0d30b02 100644 --- a/include/asm-parisc/socket.h +++ b/include/asm-parisc/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_PEERSEC 0x401d | 52 | #define SO_PEERSEC 0x401d |
53 | #define SO_PASSSEC 0x401e | 53 | #define SO_PASSSEC 0x401e |
54 | 54 | ||
55 | #define SO_MARK 0x401f | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-powerpc/socket.h b/include/asm-powerpc/socket.h index 403e9fde2eb5..f5a4e168e498 100644 --- a/include/asm-powerpc/socket.h +++ b/include/asm-powerpc/socket.h | |||
@@ -59,4 +59,6 @@ | |||
59 | #define SO_TIMESTAMPNS 35 | 59 | #define SO_TIMESTAMPNS 35 |
60 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 60 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
61 | 61 | ||
62 | #define SO_MARK 36 | ||
63 | |||
62 | #endif /* _ASM_POWERPC_SOCKET_H */ | 64 | #endif /* _ASM_POWERPC_SOCKET_H */ |
diff --git a/include/asm-s390/socket.h b/include/asm-s390/socket.h index 1161ebe3dec9..c786ab623b2d 100644 --- a/include/asm-s390/socket.h +++ b/include/asm-s390/socket.h | |||
@@ -60,4 +60,6 @@ | |||
60 | #define SO_TIMESTAMPNS 35 | 60 | #define SO_TIMESTAMPNS 35 |
61 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 61 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
62 | 62 | ||
63 | #define SO_MARK 36 | ||
64 | |||
63 | #endif /* _ASM_SOCKET_H */ | 65 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-sh/socket.h b/include/asm-sh/socket.h index c48d6fc9da38..6d4bf6512959 100644 --- a/include/asm-sh/socket.h +++ b/include/asm-sh/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* __ASM_SH_SOCKET_H */ | 57 | #endif /* __ASM_SH_SOCKET_H */ |
diff --git a/include/asm-sparc/socket.h b/include/asm-sparc/socket.h index 7c1423997cf0..2e2bd0b7c8e3 100644 --- a/include/asm-sparc/socket.h +++ b/include/asm-sparc/socket.h | |||
@@ -52,6 +52,8 @@ | |||
52 | #define SO_TIMESTAMPNS 0x0021 | 52 | #define SO_TIMESTAMPNS 0x0021 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 0x0022 | ||
56 | |||
55 | /* Security levels - as per NRL IPv6 - don't actually do anything */ | 57 | /* Security levels - as per NRL IPv6 - don't actually do anything */ |
56 | #define SO_SECURITY_AUTHENTICATION 0x5001 | 58 | #define SO_SECURITY_AUTHENTICATION 0x5001 |
57 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 | 59 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 |
diff --git a/include/asm-sparc64/socket.h b/include/asm-sparc64/socket.h index 986441dcb8f0..44a625af6e31 100644 --- a/include/asm-sparc64/socket.h +++ b/include/asm-sparc64/socket.h | |||
@@ -57,4 +57,5 @@ | |||
57 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 | 57 | #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 |
58 | #define SO_SECURITY_ENCRYPTION_NETWORK 0x5004 | 58 | #define SO_SECURITY_ENCRYPTION_NETWORK 0x5004 |
59 | 59 | ||
60 | #define SO_MARK 0x0022 | ||
60 | #endif /* _ASM_SOCKET_H */ | 61 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-v850/socket.h b/include/asm-v850/socket.h index a4c2493b025f..e199a2bf12aa 100644 --- a/include/asm-v850/socket.h +++ b/include/asm-v850/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* __V850_SOCKET_H__ */ | 57 | #endif /* __V850_SOCKET_H__ */ |
diff --git a/include/asm-x86/socket.h b/include/asm-x86/socket.h index 99ca648b94c5..80af9c4ccad7 100644 --- a/include/asm-x86/socket.h +++ b/include/asm-x86/socket.h | |||
@@ -52,4 +52,6 @@ | |||
52 | #define SO_TIMESTAMPNS 35 | 52 | #define SO_TIMESTAMPNS 35 |
53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 53 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
54 | 54 | ||
55 | #define SO_MARK 36 | ||
56 | |||
55 | #endif /* _ASM_SOCKET_H */ | 57 | #endif /* _ASM_SOCKET_H */ |
diff --git a/include/asm-xtensa/socket.h b/include/asm-xtensa/socket.h index 1f5aeacb9da2..6100682b1da2 100644 --- a/include/asm-xtensa/socket.h +++ b/include/asm-xtensa/socket.h | |||
@@ -63,4 +63,6 @@ | |||
63 | #define SO_TIMESTAMPNS 35 | 63 | #define SO_TIMESTAMPNS 35 |
64 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS | 64 | #define SCM_TIMESTAMPNS SO_TIMESTAMPNS |
65 | 65 | ||
66 | #define SO_MARK 36 | ||
67 | |||
66 | #endif /* _XTENSA_SOCKET_H */ | 68 | #endif /* _XTENSA_SOCKET_H */ |
diff --git a/include/net/route.h b/include/net/route.h index 4eabf008413b..fcc6d5b35863 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <net/dst.h> | 27 | #include <net/dst.h> |
28 | #include <net/inetpeer.h> | 28 | #include <net/inetpeer.h> |
29 | #include <net/flow.h> | 29 | #include <net/flow.h> |
30 | #include <net/sock.h> | ||
30 | #include <linux/in_route.h> | 31 | #include <linux/in_route.h> |
31 | #include <linux/rtnetlink.h> | 32 | #include <linux/rtnetlink.h> |
32 | #include <linux/route.h> | 33 | #include <linux/route.h> |
@@ -149,6 +150,7 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, | |||
149 | int flags) | 150 | int flags) |
150 | { | 151 | { |
151 | struct flowi fl = { .oif = oif, | 152 | struct flowi fl = { .oif = oif, |
153 | .mark = sk->sk_mark, | ||
152 | .nl_u = { .ip4_u = { .daddr = dst, | 154 | .nl_u = { .ip4_u = { .daddr = dst, |
153 | .saddr = src, | 155 | .saddr = src, |
154 | .tos = tos } }, | 156 | .tos = tos } }, |
diff --git a/include/net/sock.h b/include/net/sock.h index 902324488d0f..e3fb4c047f4c 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -262,6 +262,8 @@ struct sock { | |||
262 | __u32 sk_sndmsg_off; | 262 | __u32 sk_sndmsg_off; |
263 | int sk_write_pending; | 263 | int sk_write_pending; |
264 | void *sk_security; | 264 | void *sk_security; |
265 | __u32 sk_mark; | ||
266 | /* XXX 4 bytes hole on 64 bit */ | ||
265 | void (*sk_state_change)(struct sock *sk); | 267 | void (*sk_state_change)(struct sock *sk); |
266 | void (*sk_data_ready)(struct sock *sk, int bytes); | 268 | void (*sk_data_ready)(struct sock *sk, int bytes); |
267 | void (*sk_write_space)(struct sock *sk); | 269 | void (*sk_write_space)(struct sock *sk); |
diff --git a/net/core/sock.c b/net/core/sock.c index 1c4b1cd16d65..433715fb141a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -667,6 +667,13 @@ set_rcvbuf: | |||
667 | else | 667 | else |
668 | clear_bit(SOCK_PASSSEC, &sock->flags); | 668 | clear_bit(SOCK_PASSSEC, &sock->flags); |
669 | break; | 669 | break; |
670 | case SO_MARK: | ||
671 | if (!capable(CAP_NET_ADMIN)) | ||
672 | ret = -EPERM; | ||
673 | else { | ||
674 | sk->sk_mark = val; | ||
675 | } | ||
676 | break; | ||
670 | 677 | ||
671 | /* We implement the SO_SNDLOWAT etc to | 678 | /* We implement the SO_SNDLOWAT etc to |
672 | not be settable (1003.1g 5.3) */ | 679 | not be settable (1003.1g 5.3) */ |
@@ -836,6 +843,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
836 | case SO_PEERSEC: | 843 | case SO_PEERSEC: |
837 | return security_socket_getpeersec_stream(sock, optval, optlen, len); | 844 | return security_socket_getpeersec_stream(sock, optval, optlen, len); |
838 | 845 | ||
846 | case SO_MARK: | ||
847 | v.val = sk->sk_mark; | ||
848 | break; | ||
849 | |||
839 | default: | 850 | default: |
840 | return -ENOPROTOOPT; | 851 | return -ENOPROTOOPT; |
841 | } | 852 | } |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 6e4d5f493bf9..341779e685d9 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -168,6 +168,7 @@ int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk, | |||
168 | } | 168 | } |
169 | 169 | ||
170 | skb->priority = sk->sk_priority; | 170 | skb->priority = sk->sk_priority; |
171 | skb->mark = sk->sk_mark; | ||
171 | 172 | ||
172 | /* Send it out. */ | 173 | /* Send it out. */ |
173 | return ip_local_out(skb); | 174 | return ip_local_out(skb); |
@@ -385,6 +386,7 @@ packet_routed: | |||
385 | (skb_shinfo(skb)->gso_segs ?: 1) - 1); | 386 | (skb_shinfo(skb)->gso_segs ?: 1) - 1); |
386 | 387 | ||
387 | skb->priority = sk->sk_priority; | 388 | skb->priority = sk->sk_priority; |
389 | skb->mark = sk->sk_mark; | ||
388 | 390 | ||
389 | return ip_local_out(skb); | 391 | return ip_local_out(skb); |
390 | 392 | ||
@@ -1286,6 +1288,7 @@ int ip_push_pending_frames(struct sock *sk) | |||
1286 | iph->daddr = rt->rt_dst; | 1288 | iph->daddr = rt->rt_dst; |
1287 | 1289 | ||
1288 | skb->priority = sk->sk_priority; | 1290 | skb->priority = sk->sk_priority; |
1291 | skb->mark = sk->sk_mark; | ||
1289 | skb->dst = dst_clone(&rt->u.dst); | 1292 | skb->dst = dst_clone(&rt->u.dst); |
1290 | 1293 | ||
1291 | if (iph->protocol == IPPROTO_ICMP) | 1294 | if (iph->protocol == IPPROTO_ICMP) |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 85c08696abbe..f863c3dc5421 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -352,6 +352,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length, | |||
352 | skb_reserve(skb, hh_len); | 352 | skb_reserve(skb, hh_len); |
353 | 353 | ||
354 | skb->priority = sk->sk_priority; | 354 | skb->priority = sk->sk_priority; |
355 | skb->mark = sk->sk_mark; | ||
355 | skb->dst = dst_clone(&rt->u.dst); | 356 | skb->dst = dst_clone(&rt->u.dst); |
356 | 357 | ||
357 | skb_reset_network_header(skb); | 358 | skb_reset_network_header(skb); |
@@ -544,6 +545,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
544 | 545 | ||
545 | { | 546 | { |
546 | struct flowi fl = { .oif = ipc.oif, | 547 | struct flowi fl = { .oif = ipc.oif, |
548 | .mark = sk->sk_mark, | ||
547 | .nl_u = { .ip4_u = | 549 | .nl_u = { .ip4_u = |
548 | { .daddr = daddr, | 550 | { .daddr = daddr, |
549 | .saddr = saddr, | 551 | .saddr = saddr, |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index cfe9e707883c..9ac6ca2521c3 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -257,6 +257,7 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl, | |||
257 | ipv6_addr_copy(&hdr->daddr, first_hop); | 257 | ipv6_addr_copy(&hdr->daddr, first_hop); |
258 | 258 | ||
259 | skb->priority = sk->sk_priority; | 259 | skb->priority = sk->sk_priority; |
260 | skb->mark = sk->sk_mark; | ||
260 | 261 | ||
261 | mtu = dst_mtu(dst); | 262 | mtu = dst_mtu(dst); |
262 | if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) { | 263 | if ((skb->len <= mtu) || ipfragok || skb_is_gso(skb)) { |
@@ -1439,6 +1440,7 @@ int ip6_push_pending_frames(struct sock *sk) | |||
1439 | ipv6_addr_copy(&hdr->daddr, final_dst); | 1440 | ipv6_addr_copy(&hdr->daddr, final_dst); |
1440 | 1441 | ||
1441 | skb->priority = sk->sk_priority; | 1442 | skb->priority = sk->sk_priority; |
1443 | skb->mark = sk->sk_mark; | ||
1442 | 1444 | ||
1443 | skb->dst = dst_clone(&rt->u.dst); | 1445 | skb->dst = dst_clone(&rt->u.dst); |
1444 | IP6_INC_STATS(rt->rt6i_idev, IPSTATS_MIB_OUTREQUESTS); | 1446 | IP6_INC_STATS(rt->rt6i_idev, IPSTATS_MIB_OUTREQUESTS); |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 4d880551fe6a..d61c63dedbf6 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
@@ -641,6 +641,7 @@ static int rawv6_send_hdrinc(struct sock *sk, void *from, int length, | |||
641 | skb_reserve(skb, hh_len); | 641 | skb_reserve(skb, hh_len); |
642 | 642 | ||
643 | skb->priority = sk->sk_priority; | 643 | skb->priority = sk->sk_priority; |
644 | skb->mark = sk->sk_mark; | ||
644 | skb->dst = dst_clone(&rt->u.dst); | 645 | skb->dst = dst_clone(&rt->u.dst); |
645 | 646 | ||
646 | skb_put(skb, length); | 647 | skb_put(skb, length); |
@@ -767,6 +768,8 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
767 | */ | 768 | */ |
768 | memset(&fl, 0, sizeof(fl)); | 769 | memset(&fl, 0, sizeof(fl)); |
769 | 770 | ||
771 | fl.mark = sk->sk_mark; | ||
772 | |||
770 | if (sin6) { | 773 | if (sin6) { |
771 | if (addr_len < SIN6_LEN_RFC2133) | 774 | if (addr_len < SIN6_LEN_RFC2133) |
772 | return -EINVAL; | 775 | return -EINVAL; |