diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-01 14:35:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-01 14:35:16 -0400 |
commit | 9a5467fd600669cda488771dac3e951034fe2b08 (patch) | |
tree | 20c3c73ff3571e525193aca20d3602161b4e90be /include | |
parent | 676056132425ac425d7215cdaa8bd25582e07966 (diff) | |
parent | 00b1304c4ca81dd893973cc620b87a5c3ff3f660 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (46 commits)
tcp: MD5: Fix IPv6 signatures
skbuff: add missing kernel-doc for do_not_encrypt
net/ipv4/route.c: fix build error
tcp: MD5: Fix MD5 signatures on certain ACK packets
ipv6: Fix ip6_xmit to send fragments if ipfragok is true
ipvs: Move userspace definitions to include/linux/ip_vs.h
netdev: Fix lockdep warnings in multiqueue configurations.
netfilter: xt_hashlimit: fix race between htable_destroy and htable_gc
netfilter: ipt_recent: fix race between recent_mt_destroy and proc manipulations
netfilter: nf_conntrack_tcp: decrease timeouts while data in unacknowledged
irda: replace __FUNCTION__ with __func__
nsc-ircc: default to dongle type 9 on IBM hardware
bluetooth: add quirks for a few hci_usb devices
hysdn: remove the packed attribute from PofTimStamp_tag
isdn: use the common ascii hex helpers
tg3: adapt tg3 to use reworked PCI PM code
atm: fix direct casts of pointers to u32 in the InterPhase driver
atm: fix const assignment/discard warnings in the ATM networking driver
net: use the common ascii hex helpers
random32: seeding improvement
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/Kbuild | 1 | ||||
-rw-r--r-- | include/linux/ip_vs.h | 245 | ||||
-rw-r--r-- | include/linux/netdevice.h | 86 | ||||
-rw-r--r-- | include/linux/netfilter/nf_conntrack_tcp.h | 3 | ||||
-rw-r--r-- | include/linux/skbuff.h | 1 | ||||
-rw-r--r-- | include/net/ip_vs.h | 253 |
6 files changed, 313 insertions, 276 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 4c4142c5aa6e..a26f565e8189 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
@@ -97,6 +97,7 @@ header-y += ioctl.h | |||
97 | header-y += ip6_tunnel.h | 97 | header-y += ip6_tunnel.h |
98 | header-y += ipmi_msgdefs.h | 98 | header-y += ipmi_msgdefs.h |
99 | header-y += ipsec.h | 99 | header-y += ipsec.h |
100 | header-y += ip_vs.h | ||
100 | header-y += ipx.h | 101 | header-y += ipx.h |
101 | header-y += irda.h | 102 | header-y += irda.h |
102 | header-y += iso_fs.h | 103 | header-y += iso_fs.h |
diff --git a/include/linux/ip_vs.h b/include/linux/ip_vs.h new file mode 100644 index 000000000000..ec6eb49af2d8 --- /dev/null +++ b/include/linux/ip_vs.h | |||
@@ -0,0 +1,245 @@ | |||
1 | /* | ||
2 | * IP Virtual Server | ||
3 | * data structure and functionality definitions | ||
4 | */ | ||
5 | |||
6 | #ifndef _IP_VS_H | ||
7 | #define _IP_VS_H | ||
8 | |||
9 | #include <linux/types.h> /* For __beXX types in userland */ | ||
10 | |||
11 | #define IP_VS_VERSION_CODE 0x010201 | ||
12 | #define NVERSION(version) \ | ||
13 | (version >> 16) & 0xFF, \ | ||
14 | (version >> 8) & 0xFF, \ | ||
15 | version & 0xFF | ||
16 | |||
17 | /* | ||
18 | * Virtual Service Flags | ||
19 | */ | ||
20 | #define IP_VS_SVC_F_PERSISTENT 0x0001 /* persistent port */ | ||
21 | #define IP_VS_SVC_F_HASHED 0x0002 /* hashed entry */ | ||
22 | |||
23 | /* | ||
24 | * Destination Server Flags | ||
25 | */ | ||
26 | #define IP_VS_DEST_F_AVAILABLE 0x0001 /* server is available */ | ||
27 | #define IP_VS_DEST_F_OVERLOAD 0x0002 /* server is overloaded */ | ||
28 | |||
29 | /* | ||
30 | * IPVS sync daemon states | ||
31 | */ | ||
32 | #define IP_VS_STATE_NONE 0x0000 /* daemon is stopped */ | ||
33 | #define IP_VS_STATE_MASTER 0x0001 /* started as master */ | ||
34 | #define IP_VS_STATE_BACKUP 0x0002 /* started as backup */ | ||
35 | |||
36 | /* | ||
37 | * IPVS socket options | ||
38 | */ | ||
39 | #define IP_VS_BASE_CTL (64+1024+64) /* base */ | ||
40 | |||
41 | #define IP_VS_SO_SET_NONE IP_VS_BASE_CTL /* just peek */ | ||
42 | #define IP_VS_SO_SET_INSERT (IP_VS_BASE_CTL+1) | ||
43 | #define IP_VS_SO_SET_ADD (IP_VS_BASE_CTL+2) | ||
44 | #define IP_VS_SO_SET_EDIT (IP_VS_BASE_CTL+3) | ||
45 | #define IP_VS_SO_SET_DEL (IP_VS_BASE_CTL+4) | ||
46 | #define IP_VS_SO_SET_FLUSH (IP_VS_BASE_CTL+5) | ||
47 | #define IP_VS_SO_SET_LIST (IP_VS_BASE_CTL+6) | ||
48 | #define IP_VS_SO_SET_ADDDEST (IP_VS_BASE_CTL+7) | ||
49 | #define IP_VS_SO_SET_DELDEST (IP_VS_BASE_CTL+8) | ||
50 | #define IP_VS_SO_SET_EDITDEST (IP_VS_BASE_CTL+9) | ||
51 | #define IP_VS_SO_SET_TIMEOUT (IP_VS_BASE_CTL+10) | ||
52 | #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11) | ||
53 | #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12) | ||
54 | #define IP_VS_SO_SET_RESTORE (IP_VS_BASE_CTL+13) | ||
55 | #define IP_VS_SO_SET_SAVE (IP_VS_BASE_CTL+14) | ||
56 | #define IP_VS_SO_SET_ZERO (IP_VS_BASE_CTL+15) | ||
57 | #define IP_VS_SO_SET_MAX IP_VS_SO_SET_ZERO | ||
58 | |||
59 | #define IP_VS_SO_GET_VERSION IP_VS_BASE_CTL | ||
60 | #define IP_VS_SO_GET_INFO (IP_VS_BASE_CTL+1) | ||
61 | #define IP_VS_SO_GET_SERVICES (IP_VS_BASE_CTL+2) | ||
62 | #define IP_VS_SO_GET_SERVICE (IP_VS_BASE_CTL+3) | ||
63 | #define IP_VS_SO_GET_DESTS (IP_VS_BASE_CTL+4) | ||
64 | #define IP_VS_SO_GET_DEST (IP_VS_BASE_CTL+5) /* not used now */ | ||
65 | #define IP_VS_SO_GET_TIMEOUT (IP_VS_BASE_CTL+6) | ||
66 | #define IP_VS_SO_GET_DAEMON (IP_VS_BASE_CTL+7) | ||
67 | #define IP_VS_SO_GET_MAX IP_VS_SO_GET_DAEMON | ||
68 | |||
69 | |||
70 | /* | ||
71 | * IPVS Connection Flags | ||
72 | */ | ||
73 | #define IP_VS_CONN_F_FWD_MASK 0x0007 /* mask for the fwd methods */ | ||
74 | #define IP_VS_CONN_F_MASQ 0x0000 /* masquerading/NAT */ | ||
75 | #define IP_VS_CONN_F_LOCALNODE 0x0001 /* local node */ | ||
76 | #define IP_VS_CONN_F_TUNNEL 0x0002 /* tunneling */ | ||
77 | #define IP_VS_CONN_F_DROUTE 0x0003 /* direct routing */ | ||
78 | #define IP_VS_CONN_F_BYPASS 0x0004 /* cache bypass */ | ||
79 | #define IP_VS_CONN_F_SYNC 0x0020 /* entry created by sync */ | ||
80 | #define IP_VS_CONN_F_HASHED 0x0040 /* hashed entry */ | ||
81 | #define IP_VS_CONN_F_NOOUTPUT 0x0080 /* no output packets */ | ||
82 | #define IP_VS_CONN_F_INACTIVE 0x0100 /* not established */ | ||
83 | #define IP_VS_CONN_F_OUT_SEQ 0x0200 /* must do output seq adjust */ | ||
84 | #define IP_VS_CONN_F_IN_SEQ 0x0400 /* must do input seq adjust */ | ||
85 | #define IP_VS_CONN_F_SEQ_MASK 0x0600 /* in/out sequence mask */ | ||
86 | #define IP_VS_CONN_F_NO_CPORT 0x0800 /* no client port set yet */ | ||
87 | #define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */ | ||
88 | |||
89 | #define IP_VS_SCHEDNAME_MAXLEN 16 | ||
90 | #define IP_VS_IFNAME_MAXLEN 16 | ||
91 | |||
92 | |||
93 | /* | ||
94 | * The struct ip_vs_service_user and struct ip_vs_dest_user are | ||
95 | * used to set IPVS rules through setsockopt. | ||
96 | */ | ||
97 | struct ip_vs_service_user { | ||
98 | /* virtual service addresses */ | ||
99 | u_int16_t protocol; | ||
100 | __be32 addr; /* virtual ip address */ | ||
101 | __be16 port; | ||
102 | u_int32_t fwmark; /* firwall mark of service */ | ||
103 | |||
104 | /* virtual service options */ | ||
105 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | ||
106 | unsigned flags; /* virtual service flags */ | ||
107 | unsigned timeout; /* persistent timeout in sec */ | ||
108 | __be32 netmask; /* persistent netmask */ | ||
109 | }; | ||
110 | |||
111 | |||
112 | struct ip_vs_dest_user { | ||
113 | /* destination server address */ | ||
114 | __be32 addr; | ||
115 | __be16 port; | ||
116 | |||
117 | /* real server options */ | ||
118 | unsigned conn_flags; /* connection flags */ | ||
119 | int weight; /* destination weight */ | ||
120 | |||
121 | /* thresholds for active connections */ | ||
122 | u_int32_t u_threshold; /* upper threshold */ | ||
123 | u_int32_t l_threshold; /* lower threshold */ | ||
124 | }; | ||
125 | |||
126 | |||
127 | /* | ||
128 | * IPVS statistics object (for user space) | ||
129 | */ | ||
130 | struct ip_vs_stats_user | ||
131 | { | ||
132 | __u32 conns; /* connections scheduled */ | ||
133 | __u32 inpkts; /* incoming packets */ | ||
134 | __u32 outpkts; /* outgoing packets */ | ||
135 | __u64 inbytes; /* incoming bytes */ | ||
136 | __u64 outbytes; /* outgoing bytes */ | ||
137 | |||
138 | __u32 cps; /* current connection rate */ | ||
139 | __u32 inpps; /* current in packet rate */ | ||
140 | __u32 outpps; /* current out packet rate */ | ||
141 | __u32 inbps; /* current in byte rate */ | ||
142 | __u32 outbps; /* current out byte rate */ | ||
143 | }; | ||
144 | |||
145 | |||
146 | /* The argument to IP_VS_SO_GET_INFO */ | ||
147 | struct ip_vs_getinfo { | ||
148 | /* version number */ | ||
149 | unsigned int version; | ||
150 | |||
151 | /* size of connection hash table */ | ||
152 | unsigned int size; | ||
153 | |||
154 | /* number of virtual services */ | ||
155 | unsigned int num_services; | ||
156 | }; | ||
157 | |||
158 | |||
159 | /* The argument to IP_VS_SO_GET_SERVICE */ | ||
160 | struct ip_vs_service_entry { | ||
161 | /* which service: user fills in these */ | ||
162 | u_int16_t protocol; | ||
163 | __be32 addr; /* virtual address */ | ||
164 | __be16 port; | ||
165 | u_int32_t fwmark; /* firwall mark of service */ | ||
166 | |||
167 | /* service options */ | ||
168 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | ||
169 | unsigned flags; /* virtual service flags */ | ||
170 | unsigned timeout; /* persistent timeout */ | ||
171 | __be32 netmask; /* persistent netmask */ | ||
172 | |||
173 | /* number of real servers */ | ||
174 | unsigned int num_dests; | ||
175 | |||
176 | /* statistics */ | ||
177 | struct ip_vs_stats_user stats; | ||
178 | }; | ||
179 | |||
180 | |||
181 | struct ip_vs_dest_entry { | ||
182 | __be32 addr; /* destination address */ | ||
183 | __be16 port; | ||
184 | unsigned conn_flags; /* connection flags */ | ||
185 | int weight; /* destination weight */ | ||
186 | |||
187 | u_int32_t u_threshold; /* upper threshold */ | ||
188 | u_int32_t l_threshold; /* lower threshold */ | ||
189 | |||
190 | u_int32_t activeconns; /* active connections */ | ||
191 | u_int32_t inactconns; /* inactive connections */ | ||
192 | u_int32_t persistconns; /* persistent connections */ | ||
193 | |||
194 | /* statistics */ | ||
195 | struct ip_vs_stats_user stats; | ||
196 | }; | ||
197 | |||
198 | |||
199 | /* The argument to IP_VS_SO_GET_DESTS */ | ||
200 | struct ip_vs_get_dests { | ||
201 | /* which service: user fills in these */ | ||
202 | u_int16_t protocol; | ||
203 | __be32 addr; /* virtual address */ | ||
204 | __be16 port; | ||
205 | u_int32_t fwmark; /* firwall mark of service */ | ||
206 | |||
207 | /* number of real servers */ | ||
208 | unsigned int num_dests; | ||
209 | |||
210 | /* the real servers */ | ||
211 | struct ip_vs_dest_entry entrytable[0]; | ||
212 | }; | ||
213 | |||
214 | |||
215 | /* The argument to IP_VS_SO_GET_SERVICES */ | ||
216 | struct ip_vs_get_services { | ||
217 | /* number of virtual services */ | ||
218 | unsigned int num_services; | ||
219 | |||
220 | /* service table */ | ||
221 | struct ip_vs_service_entry entrytable[0]; | ||
222 | }; | ||
223 | |||
224 | |||
225 | /* The argument to IP_VS_SO_GET_TIMEOUT */ | ||
226 | struct ip_vs_timeout_user { | ||
227 | int tcp_timeout; | ||
228 | int tcp_fin_timeout; | ||
229 | int udp_timeout; | ||
230 | }; | ||
231 | |||
232 | |||
233 | /* The argument to IP_VS_SO_GET_DAEMON */ | ||
234 | struct ip_vs_daemon_user { | ||
235 | /* sync daemon state (master/backup) */ | ||
236 | int state; | ||
237 | |||
238 | /* multicast interface name */ | ||
239 | char mcast_ifn[IP_VS_IFNAME_MAXLEN]; | ||
240 | |||
241 | /* SyncID we belong to */ | ||
242 | int syncid; | ||
243 | }; | ||
244 | |||
245 | #endif /* _IP_VS_H */ | ||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b4d056ceab96..ee583f642a9f 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -440,6 +440,7 @@ static inline void napi_synchronize(const struct napi_struct *n) | |||
440 | enum netdev_queue_state_t | 440 | enum netdev_queue_state_t |
441 | { | 441 | { |
442 | __QUEUE_STATE_XOFF, | 442 | __QUEUE_STATE_XOFF, |
443 | __QUEUE_STATE_FROZEN, | ||
443 | }; | 444 | }; |
444 | 445 | ||
445 | struct netdev_queue { | 446 | struct netdev_queue { |
@@ -636,7 +637,7 @@ struct net_device | |||
636 | unsigned int real_num_tx_queues; | 637 | unsigned int real_num_tx_queues; |
637 | 638 | ||
638 | unsigned long tx_queue_len; /* Max frames per queue allowed */ | 639 | unsigned long tx_queue_len; /* Max frames per queue allowed */ |
639 | 640 | spinlock_t tx_global_lock; | |
640 | /* | 641 | /* |
641 | * One part is mostly used on xmit path (device) | 642 | * One part is mostly used on xmit path (device) |
642 | */ | 643 | */ |
@@ -1099,6 +1100,11 @@ static inline int netif_queue_stopped(const struct net_device *dev) | |||
1099 | return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0)); | 1100 | return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0)); |
1100 | } | 1101 | } |
1101 | 1102 | ||
1103 | static inline int netif_tx_queue_frozen(const struct netdev_queue *dev_queue) | ||
1104 | { | ||
1105 | return test_bit(__QUEUE_STATE_FROZEN, &dev_queue->state); | ||
1106 | } | ||
1107 | |||
1102 | /** | 1108 | /** |
1103 | * netif_running - test if up | 1109 | * netif_running - test if up |
1104 | * @dev: network device | 1110 | * @dev: network device |
@@ -1475,6 +1481,26 @@ static inline void __netif_tx_lock_bh(struct netdev_queue *txq) | |||
1475 | txq->xmit_lock_owner = smp_processor_id(); | 1481 | txq->xmit_lock_owner = smp_processor_id(); |
1476 | } | 1482 | } |
1477 | 1483 | ||
1484 | static inline int __netif_tx_trylock(struct netdev_queue *txq) | ||
1485 | { | ||
1486 | int ok = spin_trylock(&txq->_xmit_lock); | ||
1487 | if (likely(ok)) | ||
1488 | txq->xmit_lock_owner = smp_processor_id(); | ||
1489 | return ok; | ||
1490 | } | ||
1491 | |||
1492 | static inline void __netif_tx_unlock(struct netdev_queue *txq) | ||
1493 | { | ||
1494 | txq->xmit_lock_owner = -1; | ||
1495 | spin_unlock(&txq->_xmit_lock); | ||
1496 | } | ||
1497 | |||
1498 | static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | ||
1499 | { | ||
1500 | txq->xmit_lock_owner = -1; | ||
1501 | spin_unlock_bh(&txq->_xmit_lock); | ||
1502 | } | ||
1503 | |||
1478 | /** | 1504 | /** |
1479 | * netif_tx_lock - grab network device transmit lock | 1505 | * netif_tx_lock - grab network device transmit lock |
1480 | * @dev: network device | 1506 | * @dev: network device |
@@ -1484,12 +1510,23 @@ static inline void __netif_tx_lock_bh(struct netdev_queue *txq) | |||
1484 | */ | 1510 | */ |
1485 | static inline void netif_tx_lock(struct net_device *dev) | 1511 | static inline void netif_tx_lock(struct net_device *dev) |
1486 | { | 1512 | { |
1487 | int cpu = smp_processor_id(); | ||
1488 | unsigned int i; | 1513 | unsigned int i; |
1514 | int cpu; | ||
1489 | 1515 | ||
1516 | spin_lock(&dev->tx_global_lock); | ||
1517 | cpu = smp_processor_id(); | ||
1490 | for (i = 0; i < dev->num_tx_queues; i++) { | 1518 | for (i = 0; i < dev->num_tx_queues; i++) { |
1491 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | 1519 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); |
1520 | |||
1521 | /* We are the only thread of execution doing a | ||
1522 | * freeze, but we have to grab the _xmit_lock in | ||
1523 | * order to synchronize with threads which are in | ||
1524 | * the ->hard_start_xmit() handler and already | ||
1525 | * checked the frozen bit. | ||
1526 | */ | ||
1492 | __netif_tx_lock(txq, cpu); | 1527 | __netif_tx_lock(txq, cpu); |
1528 | set_bit(__QUEUE_STATE_FROZEN, &txq->state); | ||
1529 | __netif_tx_unlock(txq); | ||
1493 | } | 1530 | } |
1494 | } | 1531 | } |
1495 | 1532 | ||
@@ -1499,40 +1536,22 @@ static inline void netif_tx_lock_bh(struct net_device *dev) | |||
1499 | netif_tx_lock(dev); | 1536 | netif_tx_lock(dev); |
1500 | } | 1537 | } |
1501 | 1538 | ||
1502 | static inline int __netif_tx_trylock(struct netdev_queue *txq) | ||
1503 | { | ||
1504 | int ok = spin_trylock(&txq->_xmit_lock); | ||
1505 | if (likely(ok)) | ||
1506 | txq->xmit_lock_owner = smp_processor_id(); | ||
1507 | return ok; | ||
1508 | } | ||
1509 | |||
1510 | static inline int netif_tx_trylock(struct net_device *dev) | ||
1511 | { | ||
1512 | return __netif_tx_trylock(netdev_get_tx_queue(dev, 0)); | ||
1513 | } | ||
1514 | |||
1515 | static inline void __netif_tx_unlock(struct netdev_queue *txq) | ||
1516 | { | ||
1517 | txq->xmit_lock_owner = -1; | ||
1518 | spin_unlock(&txq->_xmit_lock); | ||
1519 | } | ||
1520 | |||
1521 | static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) | ||
1522 | { | ||
1523 | txq->xmit_lock_owner = -1; | ||
1524 | spin_unlock_bh(&txq->_xmit_lock); | ||
1525 | } | ||
1526 | |||
1527 | static inline void netif_tx_unlock(struct net_device *dev) | 1539 | static inline void netif_tx_unlock(struct net_device *dev) |
1528 | { | 1540 | { |
1529 | unsigned int i; | 1541 | unsigned int i; |
1530 | 1542 | ||
1531 | for (i = 0; i < dev->num_tx_queues; i++) { | 1543 | for (i = 0; i < dev->num_tx_queues; i++) { |
1532 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | 1544 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); |
1533 | __netif_tx_unlock(txq); | ||
1534 | } | ||
1535 | 1545 | ||
1546 | /* No need to grab the _xmit_lock here. If the | ||
1547 | * queue is not stopped for another reason, we | ||
1548 | * force a schedule. | ||
1549 | */ | ||
1550 | clear_bit(__QUEUE_STATE_FROZEN, &txq->state); | ||
1551 | if (!test_bit(__QUEUE_STATE_XOFF, &txq->state)) | ||
1552 | __netif_schedule(txq->qdisc); | ||
1553 | } | ||
1554 | spin_unlock(&dev->tx_global_lock); | ||
1536 | } | 1555 | } |
1537 | 1556 | ||
1538 | static inline void netif_tx_unlock_bh(struct net_device *dev) | 1557 | static inline void netif_tx_unlock_bh(struct net_device *dev) |
@@ -1556,13 +1575,18 @@ static inline void netif_tx_unlock_bh(struct net_device *dev) | |||
1556 | static inline void netif_tx_disable(struct net_device *dev) | 1575 | static inline void netif_tx_disable(struct net_device *dev) |
1557 | { | 1576 | { |
1558 | unsigned int i; | 1577 | unsigned int i; |
1578 | int cpu; | ||
1559 | 1579 | ||
1560 | netif_tx_lock_bh(dev); | 1580 | local_bh_disable(); |
1581 | cpu = smp_processor_id(); | ||
1561 | for (i = 0; i < dev->num_tx_queues; i++) { | 1582 | for (i = 0; i < dev->num_tx_queues; i++) { |
1562 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); | 1583 | struct netdev_queue *txq = netdev_get_tx_queue(dev, i); |
1584 | |||
1585 | __netif_tx_lock(txq, cpu); | ||
1563 | netif_tx_stop_queue(txq); | 1586 | netif_tx_stop_queue(txq); |
1587 | __netif_tx_unlock(txq); | ||
1564 | } | 1588 | } |
1565 | netif_tx_unlock_bh(dev); | 1589 | local_bh_enable(); |
1566 | } | 1590 | } |
1567 | 1591 | ||
1568 | static inline void netif_addr_lock(struct net_device *dev) | 1592 | static inline void netif_addr_lock(struct net_device *dev) |
diff --git a/include/linux/netfilter/nf_conntrack_tcp.h b/include/linux/netfilter/nf_conntrack_tcp.h index 22ce29995f13..a049df4f2236 100644 --- a/include/linux/netfilter/nf_conntrack_tcp.h +++ b/include/linux/netfilter/nf_conntrack_tcp.h | |||
@@ -30,6 +30,9 @@ enum tcp_conntrack { | |||
30 | /* Be liberal in window checking */ | 30 | /* Be liberal in window checking */ |
31 | #define IP_CT_TCP_FLAG_BE_LIBERAL 0x08 | 31 | #define IP_CT_TCP_FLAG_BE_LIBERAL 0x08 |
32 | 32 | ||
33 | /* Has unacknowledged data */ | ||
34 | #define IP_CT_TCP_FLAG_DATA_UNACKNOWLEDGED 0x10 | ||
35 | |||
33 | struct nf_ct_tcp_flags { | 36 | struct nf_ct_tcp_flags { |
34 | u_int8_t flags; | 37 | u_int8_t flags; |
35 | u_int8_t mask; | 38 | u_int8_t mask; |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a640385e0598..cfcc45b3bef0 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -243,6 +243,7 @@ typedef unsigned char *sk_buff_data_t; | |||
243 | * @tc_index: Traffic control index | 243 | * @tc_index: Traffic control index |
244 | * @tc_verd: traffic control verdict | 244 | * @tc_verd: traffic control verdict |
245 | * @ndisc_nodetype: router type (from link layer) | 245 | * @ndisc_nodetype: router type (from link layer) |
246 | * @do_not_encrypt: set to prevent encryption of this frame | ||
246 | * @dma_cookie: a cookie to one of several possible DMA operations | 247 | * @dma_cookie: a cookie to one of several possible DMA operations |
247 | * done by skb DMA functions | 248 | * done by skb DMA functions |
248 | * @secmark: security marking | 249 | * @secmark: security marking |
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h index 9a51ebad3f1f..cbb59ebed4ae 100644 --- a/include/net/ip_vs.h +++ b/include/net/ip_vs.h | |||
@@ -3,254 +3,17 @@ | |||
3 | * data structure and functionality definitions | 3 | * data structure and functionality definitions |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #ifndef _IP_VS_H | 6 | #ifndef _NET_IP_VS_H |
7 | #define _IP_VS_H | 7 | #define _NET_IP_VS_H |
8 | |||
9 | #include <asm/types.h> /* For __uXX types */ | ||
10 | #include <linux/types.h> /* For __beXX types in userland */ | ||
11 | |||
12 | #include <linux/sysctl.h> /* For ctl_path */ | ||
13 | |||
14 | #define IP_VS_VERSION_CODE 0x010201 | ||
15 | #define NVERSION(version) \ | ||
16 | (version >> 16) & 0xFF, \ | ||
17 | (version >> 8) & 0xFF, \ | ||
18 | version & 0xFF | ||
19 | |||
20 | /* | ||
21 | * Virtual Service Flags | ||
22 | */ | ||
23 | #define IP_VS_SVC_F_PERSISTENT 0x0001 /* persistent port */ | ||
24 | #define IP_VS_SVC_F_HASHED 0x0002 /* hashed entry */ | ||
25 | |||
26 | /* | ||
27 | * Destination Server Flags | ||
28 | */ | ||
29 | #define IP_VS_DEST_F_AVAILABLE 0x0001 /* server is available */ | ||
30 | #define IP_VS_DEST_F_OVERLOAD 0x0002 /* server is overloaded */ | ||
31 | |||
32 | /* | ||
33 | * IPVS sync daemon states | ||
34 | */ | ||
35 | #define IP_VS_STATE_NONE 0x0000 /* daemon is stopped */ | ||
36 | #define IP_VS_STATE_MASTER 0x0001 /* started as master */ | ||
37 | #define IP_VS_STATE_BACKUP 0x0002 /* started as backup */ | ||
38 | |||
39 | /* | ||
40 | * IPVS socket options | ||
41 | */ | ||
42 | #define IP_VS_BASE_CTL (64+1024+64) /* base */ | ||
43 | |||
44 | #define IP_VS_SO_SET_NONE IP_VS_BASE_CTL /* just peek */ | ||
45 | #define IP_VS_SO_SET_INSERT (IP_VS_BASE_CTL+1) | ||
46 | #define IP_VS_SO_SET_ADD (IP_VS_BASE_CTL+2) | ||
47 | #define IP_VS_SO_SET_EDIT (IP_VS_BASE_CTL+3) | ||
48 | #define IP_VS_SO_SET_DEL (IP_VS_BASE_CTL+4) | ||
49 | #define IP_VS_SO_SET_FLUSH (IP_VS_BASE_CTL+5) | ||
50 | #define IP_VS_SO_SET_LIST (IP_VS_BASE_CTL+6) | ||
51 | #define IP_VS_SO_SET_ADDDEST (IP_VS_BASE_CTL+7) | ||
52 | #define IP_VS_SO_SET_DELDEST (IP_VS_BASE_CTL+8) | ||
53 | #define IP_VS_SO_SET_EDITDEST (IP_VS_BASE_CTL+9) | ||
54 | #define IP_VS_SO_SET_TIMEOUT (IP_VS_BASE_CTL+10) | ||
55 | #define IP_VS_SO_SET_STARTDAEMON (IP_VS_BASE_CTL+11) | ||
56 | #define IP_VS_SO_SET_STOPDAEMON (IP_VS_BASE_CTL+12) | ||
57 | #define IP_VS_SO_SET_RESTORE (IP_VS_BASE_CTL+13) | ||
58 | #define IP_VS_SO_SET_SAVE (IP_VS_BASE_CTL+14) | ||
59 | #define IP_VS_SO_SET_ZERO (IP_VS_BASE_CTL+15) | ||
60 | #define IP_VS_SO_SET_MAX IP_VS_SO_SET_ZERO | ||
61 | |||
62 | #define IP_VS_SO_GET_VERSION IP_VS_BASE_CTL | ||
63 | #define IP_VS_SO_GET_INFO (IP_VS_BASE_CTL+1) | ||
64 | #define IP_VS_SO_GET_SERVICES (IP_VS_BASE_CTL+2) | ||
65 | #define IP_VS_SO_GET_SERVICE (IP_VS_BASE_CTL+3) | ||
66 | #define IP_VS_SO_GET_DESTS (IP_VS_BASE_CTL+4) | ||
67 | #define IP_VS_SO_GET_DEST (IP_VS_BASE_CTL+5) /* not used now */ | ||
68 | #define IP_VS_SO_GET_TIMEOUT (IP_VS_BASE_CTL+6) | ||
69 | #define IP_VS_SO_GET_DAEMON (IP_VS_BASE_CTL+7) | ||
70 | #define IP_VS_SO_GET_MAX IP_VS_SO_GET_DAEMON | ||
71 | |||
72 | |||
73 | /* | ||
74 | * IPVS Connection Flags | ||
75 | */ | ||
76 | #define IP_VS_CONN_F_FWD_MASK 0x0007 /* mask for the fwd methods */ | ||
77 | #define IP_VS_CONN_F_MASQ 0x0000 /* masquerading/NAT */ | ||
78 | #define IP_VS_CONN_F_LOCALNODE 0x0001 /* local node */ | ||
79 | #define IP_VS_CONN_F_TUNNEL 0x0002 /* tunneling */ | ||
80 | #define IP_VS_CONN_F_DROUTE 0x0003 /* direct routing */ | ||
81 | #define IP_VS_CONN_F_BYPASS 0x0004 /* cache bypass */ | ||
82 | #define IP_VS_CONN_F_SYNC 0x0020 /* entry created by sync */ | ||
83 | #define IP_VS_CONN_F_HASHED 0x0040 /* hashed entry */ | ||
84 | #define IP_VS_CONN_F_NOOUTPUT 0x0080 /* no output packets */ | ||
85 | #define IP_VS_CONN_F_INACTIVE 0x0100 /* not established */ | ||
86 | #define IP_VS_CONN_F_OUT_SEQ 0x0200 /* must do output seq adjust */ | ||
87 | #define IP_VS_CONN_F_IN_SEQ 0x0400 /* must do input seq adjust */ | ||
88 | #define IP_VS_CONN_F_SEQ_MASK 0x0600 /* in/out sequence mask */ | ||
89 | #define IP_VS_CONN_F_NO_CPORT 0x0800 /* no client port set yet */ | ||
90 | #define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */ | ||
91 | |||
92 | /* Move it to better place one day, for now keep it unique */ | ||
93 | #define NFC_IPVS_PROPERTY 0x10000 | ||
94 | |||
95 | #define IP_VS_SCHEDNAME_MAXLEN 16 | ||
96 | #define IP_VS_IFNAME_MAXLEN 16 | ||
97 | |||
98 | |||
99 | /* | ||
100 | * The struct ip_vs_service_user and struct ip_vs_dest_user are | ||
101 | * used to set IPVS rules through setsockopt. | ||
102 | */ | ||
103 | struct ip_vs_service_user { | ||
104 | /* virtual service addresses */ | ||
105 | u_int16_t protocol; | ||
106 | __be32 addr; /* virtual ip address */ | ||
107 | __be16 port; | ||
108 | u_int32_t fwmark; /* firwall mark of service */ | ||
109 | |||
110 | /* virtual service options */ | ||
111 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | ||
112 | unsigned flags; /* virtual service flags */ | ||
113 | unsigned timeout; /* persistent timeout in sec */ | ||
114 | __be32 netmask; /* persistent netmask */ | ||
115 | }; | ||
116 | |||
117 | |||
118 | struct ip_vs_dest_user { | ||
119 | /* destination server address */ | ||
120 | __be32 addr; | ||
121 | __be16 port; | ||
122 | |||
123 | /* real server options */ | ||
124 | unsigned conn_flags; /* connection flags */ | ||
125 | int weight; /* destination weight */ | ||
126 | |||
127 | /* thresholds for active connections */ | ||
128 | u_int32_t u_threshold; /* upper threshold */ | ||
129 | u_int32_t l_threshold; /* lower threshold */ | ||
130 | }; | ||
131 | |||
132 | |||
133 | /* | ||
134 | * IPVS statistics object (for user space) | ||
135 | */ | ||
136 | struct ip_vs_stats_user | ||
137 | { | ||
138 | __u32 conns; /* connections scheduled */ | ||
139 | __u32 inpkts; /* incoming packets */ | ||
140 | __u32 outpkts; /* outgoing packets */ | ||
141 | __u64 inbytes; /* incoming bytes */ | ||
142 | __u64 outbytes; /* outgoing bytes */ | ||
143 | |||
144 | __u32 cps; /* current connection rate */ | ||
145 | __u32 inpps; /* current in packet rate */ | ||
146 | __u32 outpps; /* current out packet rate */ | ||
147 | __u32 inbps; /* current in byte rate */ | ||
148 | __u32 outbps; /* current out byte rate */ | ||
149 | }; | ||
150 | |||
151 | |||
152 | /* The argument to IP_VS_SO_GET_INFO */ | ||
153 | struct ip_vs_getinfo { | ||
154 | /* version number */ | ||
155 | unsigned int version; | ||
156 | |||
157 | /* size of connection hash table */ | ||
158 | unsigned int size; | ||
159 | |||
160 | /* number of virtual services */ | ||
161 | unsigned int num_services; | ||
162 | }; | ||
163 | |||
164 | |||
165 | /* The argument to IP_VS_SO_GET_SERVICE */ | ||
166 | struct ip_vs_service_entry { | ||
167 | /* which service: user fills in these */ | ||
168 | u_int16_t protocol; | ||
169 | __be32 addr; /* virtual address */ | ||
170 | __be16 port; | ||
171 | u_int32_t fwmark; /* firwall mark of service */ | ||
172 | |||
173 | /* service options */ | ||
174 | char sched_name[IP_VS_SCHEDNAME_MAXLEN]; | ||
175 | unsigned flags; /* virtual service flags */ | ||
176 | unsigned timeout; /* persistent timeout */ | ||
177 | __be32 netmask; /* persistent netmask */ | ||
178 | |||
179 | /* number of real servers */ | ||
180 | unsigned int num_dests; | ||
181 | |||
182 | /* statistics */ | ||
183 | struct ip_vs_stats_user stats; | ||
184 | }; | ||
185 | |||
186 | |||
187 | struct ip_vs_dest_entry { | ||
188 | __be32 addr; /* destination address */ | ||
189 | __be16 port; | ||
190 | unsigned conn_flags; /* connection flags */ | ||
191 | int weight; /* destination weight */ | ||
192 | |||
193 | u_int32_t u_threshold; /* upper threshold */ | ||
194 | u_int32_t l_threshold; /* lower threshold */ | ||
195 | |||
196 | u_int32_t activeconns; /* active connections */ | ||
197 | u_int32_t inactconns; /* inactive connections */ | ||
198 | u_int32_t persistconns; /* persistent connections */ | ||
199 | |||
200 | /* statistics */ | ||
201 | struct ip_vs_stats_user stats; | ||
202 | }; | ||
203 | |||
204 | |||
205 | /* The argument to IP_VS_SO_GET_DESTS */ | ||
206 | struct ip_vs_get_dests { | ||
207 | /* which service: user fills in these */ | ||
208 | u_int16_t protocol; | ||
209 | __be32 addr; /* virtual address */ | ||
210 | __be16 port; | ||
211 | u_int32_t fwmark; /* firwall mark of service */ | ||
212 | |||
213 | /* number of real servers */ | ||
214 | unsigned int num_dests; | ||
215 | |||
216 | /* the real servers */ | ||
217 | struct ip_vs_dest_entry entrytable[0]; | ||
218 | }; | ||
219 | |||
220 | |||
221 | /* The argument to IP_VS_SO_GET_SERVICES */ | ||
222 | struct ip_vs_get_services { | ||
223 | /* number of virtual services */ | ||
224 | unsigned int num_services; | ||
225 | |||
226 | /* service table */ | ||
227 | struct ip_vs_service_entry entrytable[0]; | ||
228 | }; | ||
229 | |||
230 | |||
231 | /* The argument to IP_VS_SO_GET_TIMEOUT */ | ||
232 | struct ip_vs_timeout_user { | ||
233 | int tcp_timeout; | ||
234 | int tcp_fin_timeout; | ||
235 | int udp_timeout; | ||
236 | }; | ||
237 | |||
238 | |||
239 | /* The argument to IP_VS_SO_GET_DAEMON */ | ||
240 | struct ip_vs_daemon_user { | ||
241 | /* sync daemon state (master/backup) */ | ||
242 | int state; | ||
243 | |||
244 | /* multicast interface name */ | ||
245 | char mcast_ifn[IP_VS_IFNAME_MAXLEN]; | ||
246 | |||
247 | /* SyncID we belong to */ | ||
248 | int syncid; | ||
249 | }; | ||
250 | 8 | ||
9 | #include <linux/ip_vs.h> /* definitions shared with userland */ | ||
251 | 10 | ||
11 | /* old ipvsadm versions still include this file directly */ | ||
252 | #ifdef __KERNEL__ | 12 | #ifdef __KERNEL__ |
253 | 13 | ||
14 | #include <asm/types.h> /* for __uXX types */ | ||
15 | |||
16 | #include <linux/sysctl.h> /* for ctl_path */ | ||
254 | #include <linux/list.h> /* for struct list_head */ | 17 | #include <linux/list.h> /* for struct list_head */ |
255 | #include <linux/spinlock.h> /* for struct rwlock_t */ | 18 | #include <linux/spinlock.h> /* for struct rwlock_t */ |
256 | #include <asm/atomic.h> /* for struct atomic_t */ | 19 | #include <asm/atomic.h> /* for struct atomic_t */ |
@@ -981,4 +744,4 @@ static inline __wsum ip_vs_check_diff2(__be16 old, __be16 new, __wsum oldsum) | |||
981 | 744 | ||
982 | #endif /* __KERNEL__ */ | 745 | #endif /* __KERNEL__ */ |
983 | 746 | ||
984 | #endif /* _IP_VS_H */ | 747 | #endif /* _NET_IP_VS_H */ |