patch-2.2.2 linux/include/net/sock.h
Next file: linux/include/net/tcp.h
Previous file: linux/include/linux/videodev.h
Back to the patch index
Back to the overall index
- Lines: 62
- Date:
Mon Feb 22 14:51:26 1999
- Orig file:
v2.2.1/linux/include/net/sock.h
- Orig date:
Wed Jan 20 23:14:06 1999
diff -u --recursive --new-file v2.2.1/linux/include/net/sock.h linux/include/net/sock.h
@@ -453,8 +453,7 @@
#ifdef CONFIG_FILTER
/* Socket Filtering Instructions */
- int filter;
- struct sock_filter *filter_data;
+ struct sk_filter *filter;
#endif /* CONFIG_FILTER */
/* This is where all the private (optional) areas that don't
@@ -790,11 +789,11 @@
* sk_run_filter. If pkt_len is 0 we toss packet. If skb->len is smaller
* than pkt_len we keep whole skb->data.
*/
-extern __inline__ int sk_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
+extern __inline__ int sk_filter(struct sk_buff *skb, struct sk_filter *filter)
{
int pkt_len;
- pkt_len = sk_run_filter(skb->data, skb->len, filter, flen);
+ pkt_len = sk_run_filter(skb, filter->insns, filter->len);
if(!pkt_len)
return 1; /* Toss Packet */
else
@@ -802,6 +801,23 @@
return 0;
}
+
+extern __inline__ void sk_filter_release(struct sock *sk, struct sk_filter *fp)
+{
+ unsigned int size = sk_filter_len(fp);
+
+ atomic_sub(size, &sk->omem_alloc);
+
+ if (atomic_dec_and_test(&fp->refcnt))
+ kfree_s(fp, size);
+}
+
+extern __inline__ void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
+{
+ atomic_inc(&fp->refcnt);
+ atomic_add(sk_filter_len(fp), &sk->omem_alloc);
+}
+
#endif /* CONFIG_FILTER */
/*
@@ -837,11 +853,8 @@
return -ENOMEM;
#ifdef CONFIG_FILTER
- if (sk->filter)
- {
- if (sk_filter(skb, sk->filter_data, sk->filter))
- return -EPERM; /* Toss packet */
- }
+ if (sk->filter && sk_filter(skb, sk->filter))
+ return -EPERM; /* Toss packet */
#endif /* CONFIG_FILTER */
skb_set_owner_r(skb, sk);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)