]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/net/ppp/ppp_generic.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
[linux-beck.git] / drivers / net / ppp / ppp_generic.c
index d5b77ef3a2100c3ce42ad75f4e1c9fe981f046e9..80e6f3430f65e96dfe3e3b8b13d694f727f330cc 100644 (file)
@@ -143,8 +143,8 @@ struct ppp {
        struct sk_buff_head mrq;        /* MP: receive reconstruction queue */
 #endif /* CONFIG_PPP_MULTILINK */
 #ifdef CONFIG_PPP_FILTER
-       struct sk_filter *pass_filter;  /* filter for packets to pass */
-       struct sk_filter *active_filter;/* filter for pkts to reset idle */
+       struct bpf_prog *pass_filter;   /* filter for packets to pass */
+       struct bpf_prog *active_filter; /* filter for pkts to reset idle */
 #endif /* CONFIG_PPP_FILTER */
        struct net      *ppp_net;       /* the net we belong to */
        struct ppp_link_stats stats64;  /* 64 bit network stats */
@@ -655,6 +655,10 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        break;
                ppp_lock(ppp);
                cflags = ppp->flags & ~val;
+#ifdef CONFIG_PPP_MULTILINK
+               if (!(ppp->flags & SC_MULTILINK) && (val & SC_MULTILINK))
+                       ppp->nextseq = 0;
+#endif
                ppp->flags = val & SC_FLAG_BITS;
                ppp_unlock(ppp);
                if (cflags & SC_CCP_OPEN)
@@ -758,12 +762,12 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
                        ppp_lock(ppp);
                        if (ppp->pass_filter) {
-                               sk_unattached_filter_destroy(ppp->pass_filter);
+                               bpf_prog_destroy(ppp->pass_filter);
                                ppp->pass_filter = NULL;
                        }
                        if (fprog.filter != NULL)
-                               err = sk_unattached_filter_create(&ppp->pass_filter,
-                                                                 &fprog);
+                               err = bpf_prog_create(&ppp->pass_filter,
+                                                     &fprog);
                        else
                                err = 0;
                        kfree(code);
@@ -784,12 +788,12 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
                        ppp_lock(ppp);
                        if (ppp->active_filter) {
-                               sk_unattached_filter_destroy(ppp->active_filter);
+                               bpf_prog_destroy(ppp->active_filter);
                                ppp->active_filter = NULL;
                        }
                        if (fprog.filter != NULL)
-                               err = sk_unattached_filter_create(&ppp->active_filter,
-                                                                 &fprog);
+                               err = bpf_prog_create(&ppp->active_filter,
+                                                     &fprog);
                        else
                                err = 0;
                        kfree(code);
@@ -1099,7 +1103,7 @@ static void ppp_setup(struct net_device *dev)
        dev->type = ARPHRD_PPP;
        dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
        dev->features |= NETIF_F_NETNS_LOCAL;
-       dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
+       netif_keep_dst(dev);
 }
 
 /*
@@ -1201,7 +1205,7 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
                   a four-byte PPP header on each packet */
                *skb_push(skb, 2) = 1;
                if (ppp->pass_filter &&
-                   SK_RUN_FILTER(ppp->pass_filter, skb) == 0) {
+                   BPF_PROG_RUN(ppp->pass_filter, skb) == 0) {
                        if (ppp->debug & 1)
                                netdev_printk(KERN_DEBUG, ppp->dev,
                                              "PPP: outbound frame "
@@ -1211,7 +1215,7 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
                }
                /* if this packet passes the active filter, record the time */
                if (!(ppp->active_filter &&
-                     SK_RUN_FILTER(ppp->active_filter, skb) == 0))
+                     BPF_PROG_RUN(ppp->active_filter, skb) == 0))
                        ppp->last_xmit = jiffies;
                skb_pull(skb, 2);
 #else
@@ -1835,7 +1839,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
 
                        *skb_push(skb, 2) = 0;
                        if (ppp->pass_filter &&
-                           SK_RUN_FILTER(ppp->pass_filter, skb) == 0) {
+                           BPF_PROG_RUN(ppp->pass_filter, skb) == 0) {
                                if (ppp->debug & 1)
                                        netdev_printk(KERN_DEBUG, ppp->dev,
                                                      "PPP: inbound frame "
@@ -1844,7 +1848,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)
                                return;
                        }
                        if (!(ppp->active_filter &&
-                             SK_RUN_FILTER(ppp->active_filter, skb) == 0))
+                             BPF_PROG_RUN(ppp->active_filter, skb) == 0))
                                ppp->last_recv = jiffies;
                        __skb_pull(skb, 2);
                } else
@@ -2669,7 +2673,8 @@ ppp_create_interface(struct net *net, int unit, int *retp)
        int ret = -ENOMEM;
        int i;
 
-       dev = alloc_netdev(sizeof(struct ppp), "", ppp_setup);
+       dev = alloc_netdev(sizeof(struct ppp), "", NET_NAME_UNKNOWN,
+                          ppp_setup);
        if (!dev)
                goto out1;
 
@@ -2824,12 +2829,12 @@ static void ppp_destroy_interface(struct ppp *ppp)
 #endif /* CONFIG_PPP_MULTILINK */
 #ifdef CONFIG_PPP_FILTER
        if (ppp->pass_filter) {
-               sk_unattached_filter_destroy(ppp->pass_filter);
+               bpf_prog_destroy(ppp->pass_filter);
                ppp->pass_filter = NULL;
        }
 
        if (ppp->active_filter) {
-               sk_unattached_filter_destroy(ppp->active_filter);
+               bpf_prog_destroy(ppp->active_filter);
                ppp->active_filter = NULL;
        }
 #endif /* CONFIG_PPP_FILTER */