patch-2.1.124 linux/net/ipv4/ip_fw.c
Next file: linux/net/ipv4/ip_gre.c
Previous file: linux/net/ipv4/ip_forward.c
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
Sun Oct 4 10:21:45 1998
- Orig file:
v2.1.123/linux/net/ipv4/ip_fw.c
- Orig date:
Sat Sep 5 16:46:42 1998
diff -u --recursive --new-file v2.1.123/linux/net/ipv4/ip_fw.c linux/net/ipv4/ip_fw.c
@@ -245,7 +245,7 @@
#endif
/* Lock around ip_fw_chains linked list structure */
-spinlock_t ip_fw_lock = SPIN_LOCK_UNLOCKED;
+rwlock_t ip_fw_lock = RW_LOCK_UNLOCKED;
/* Head of linked list of fw rules */
static struct ip_chain *ip_fw_chains;
@@ -531,18 +531,19 @@
#ifdef CONFIG_IP_FIREWALL_NETLINK
if (f->ipfw.fw_flg & IP_FW_F_NETLINK) {
size_t len = min(f->ipfw.fw_outputsize, ntohs(ip->tot_len))
- + sizeof(skb->fwmark) + IFNAMSIZ;
+ + sizeof(__u32) + sizeof(skb->fwmark) + IFNAMSIZ;
struct sk_buff *outskb=alloc_skb(len, GFP_ATOMIC);
duprintf("Sending packet out NETLINK (length = %u).\n",
(unsigned int)len);
if (outskb) {
- /* Prepend mark & interface */
+ /* Prepend length, mark & interface */
skb_put(outskb, len);
- *((__u32 *)outskb->data) = skb->fwmark;
- strcpy(outskb->data+sizeof(__u32), rif);
- memcpy(outskb->data+sizeof(__u32)+IFNAMSIZ, ip,
- len-(sizeof(__u32)+IFNAMSIZ));
+ *((__u32 *)outskb->data) = (__u32)len;
+ *((__u32 *)(outskb->data+sizeof(__u32))) = skb->fwmark;
+ strcpy(outskb->data+sizeof(__u32)*2, rif);
+ memcpy(outskb->data+sizeof(__u32)*2+IFNAMSIZ, ip,
+ len-(sizeof(__u32)*2+IFNAMSIZ));
netlink_broadcast(ipfwsk, outskb, 0, ~0, GFP_KERNEL);
}
else duprintf("netlink post failed - alloc_skb failed!\n");
@@ -1324,28 +1325,7 @@
case IP_FW_MASQ_TIMEOUTS: {
#ifdef CONFIG_IP_MASQUERADE
- struct ip_fw_masq *masq;
-
- if (len != sizeof(struct ip_fw_masq)) {
- duprintf("ip_fw_ctl (masq): length %d, expected %d\n",
- len, sizeof(struct ip_fw_masq));
- ret = EINVAL;
- }
- else {
- masq = (struct ip_fw_masq *)m;
- if (masq->tcp_timeout)
- ip_masq_expire->tcp_timeout
- = masq->tcp_timeout;
-
- if (masq->tcp_fin_timeout)
- ip_masq_expire->tcp_fin_timeout
- = masq->tcp_fin_timeout;
-
- if (masq->udp_timeout)
- ip_masq_expire->udp_timeout
- = masq->udp_timeout;
- ret = 0;
- }
+ return ip_fw_masq_timeouts(m, len);
#else
ret = EINVAL;
#endif
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]