VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / net / ipv4 / ipmr.c
index ca7e1e5..9079766 100644 (file)
@@ -109,7 +109,9 @@ static int ip_mr_forward(struct sk_buff *skb, struct mfc_cache *cache, int local
 static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert);
 static int ipmr_fill_mroute(struct sk_buff *skb, struct mfc_cache *c, struct rtmsg *rtm);
 
-static struct inet_protocol pim_protocol;
+#ifdef CONFIG_IP_PIMSM_V2
+static struct net_protocol pim_protocol;
+#endif
 
 static struct timer_list ipmr_expire_timer;
 
@@ -844,7 +846,7 @@ static void mrtsock_destruct(struct sock *sk)
  *     MOSPF/PIM router set up we can clean this up.
  */
  
-int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
+int ip_mroute_setsockopt(struct sock *sk,int optname,char __user *optval,int optlen)
 {
        int ret;
        struct vifctl vif;
@@ -925,7 +927,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
                case MRT_ASSERT:
                {
                        int v;
-                       if(get_user(v,(int *)optval))
+                       if(get_user(v,(int __user *)optval))
                                return -EFAULT;
                        mroute_do_assert=(v)?1:0;
                        return 0;
@@ -934,7 +936,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
                case MRT_PIM:
                {
                        int v, ret;
-                       if(get_user(v,(int *)optval))
+                       if(get_user(v,(int __user *)optval))
                                return -EFAULT;
                        v = (v)?1:0;
                        rtnl_lock();
@@ -970,7 +972,7 @@ int ip_mroute_setsockopt(struct sock *sk,int optname,char *optval,int optlen)
  *     Getsock opt support for the multicast routing system.
  */
  
-int ip_mroute_getsockopt(struct sock *sk,int optname,char *optval,int *optlen)
+int ip_mroute_getsockopt(struct sock *sk,int optname,char __user *optval,int __user *optlen)
 {
        int olr;
        int val;
@@ -1008,7 +1010,7 @@ int ip_mroute_getsockopt(struct sock *sk,int optname,char *optval,int *optlen)
  *     The IP multicast ioctl support routines.
  */
  
-int ipmr_ioctl(struct sock *sk, int cmd, unsigned long arg)
+int ipmr_ioctl(struct sock *sk, int cmd, void __user *arg)
 {
        struct sioc_sg_req sr;
        struct sioc_vif_req vr;
@@ -1018,7 +1020,7 @@ int ipmr_ioctl(struct sock *sk, int cmd, unsigned long arg)
        switch(cmd)
        {
                case SIOCGETVIFCNT:
-                       if (copy_from_user(&vr,(void *)arg,sizeof(vr)))
+                       if (copy_from_user(&vr,arg,sizeof(vr)))
                                return -EFAULT; 
                        if(vr.vifi>=maxvif)
                                return -EINVAL;
@@ -1031,14 +1033,14 @@ int ipmr_ioctl(struct sock *sk, int cmd, unsigned long arg)
                                vr.obytes=vif->bytes_out;
                                read_unlock(&mrt_lock);
 
-                               if (copy_to_user((void *)arg,&vr,sizeof(vr)))
+                               if (copy_to_user(arg,&vr,sizeof(vr)))
                                        return -EFAULT;
                                return 0;
                        }
                        read_unlock(&mrt_lock);
                        return -EADDRNOTAVAIL;
                case SIOCGETSGCNT:
-                       if (copy_from_user(&sr,(void *)arg,sizeof(sr)))
+                       if (copy_from_user(&sr,arg,sizeof(sr)))
                                return -EFAULT;
 
                        read_lock(&mrt_lock);
@@ -1049,7 +1051,7 @@ int ipmr_ioctl(struct sock *sk, int cmd, unsigned long arg)
                                sr.wrong_if = c->mfc_un.res.wrong_if;
                                read_unlock(&mrt_lock);
 
-                               if (copy_to_user((void *)arg,&sr,sizeof(sr)))
+                               if (copy_to_user(arg,&sr,sizeof(sr)))
                                        return -EFAULT;
                                return 0;
                        }
@@ -1105,17 +1107,14 @@ static void ip_encap(struct sk_buff *skb, u32 saddr, u32 daddr)
        skb->h.ipiph = skb->nh.iph;
        skb->nh.iph = iph;
        memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt));
-#ifdef CONFIG_NETFILTER
-       nf_conntrack_put(skb->nfct);
-       skb->nfct = NULL;
-#endif
+       nf_reset(skb);
 }
 
 static inline int ipmr_forward_finish(struct sk_buff *skb)
 {
        struct ip_options * opt = &(IPCB(skb)->opt);
 
-       IP_INC_STATS_BH(IpForwDatagrams);
+       IP_INC_STATS_BH(IPSTATS_MIB_OUTFORWDATAGRAMS);
 
        if (unlikely(opt->optlen))
                ip_forward_options(skb);
@@ -1178,7 +1177,7 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
                   to blackhole.
                 */
 
-               IP_INC_STATS_BH(IpFragFails);
+               IP_INC_STATS_BH(IPSTATS_MIB_FRAGFAILS);
                ip_rt_put(rt);
                goto out_free;
        }
@@ -1461,10 +1460,7 @@ int pim_rcv_v1(struct sk_buff * skb)
        skb->dst = NULL;
        ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len;
        ((struct net_device_stats*)reg_dev->priv)->rx_packets++;
-#ifdef CONFIG_NETFILTER
-       nf_conntrack_put(skb->nfct);
-       skb->nfct = NULL;
-#endif
+       nf_reset(skb);
        netif_rx(skb);
        dev_put(reg_dev);
        return 0;
@@ -1520,10 +1516,7 @@ static int pim_rcv(struct sk_buff * skb)
        ((struct net_device_stats*)reg_dev->priv)->rx_bytes += skb->len;
        ((struct net_device_stats*)reg_dev->priv)->rx_packets++;
        skb->dst = NULL;
-#ifdef CONFIG_NETFILTER
-       nf_conntrack_put(skb->nfct);
-       skb->nfct = NULL;
-#endif
+       nf_reset(skb);
        netif_rx(skb);
        dev_put(reg_dev);
        return 0;
@@ -1711,7 +1704,7 @@ static struct file_operations ipmr_vif_fops = {
        .open    = ipmr_vif_open,
        .read    = seq_read,
        .llseek  = seq_lseek,
-       .release = seq_release,
+       .release = seq_release_private,
 };
 
 struct ipmr_mfc_iter {
@@ -1746,6 +1739,9 @@ static struct mfc_cache *ipmr_mfc_seq_idx(struct ipmr_mfc_iter *it, loff_t pos)
 
 static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
 {
+       struct ipmr_mfc_iter *it = seq->private;
+       it->cache = NULL;
+       it->ct = 0;
        return *pos ? ipmr_mfc_seq_idx(seq->private, *pos - 1) 
                : SEQ_START_TOKEN;
 }
@@ -1855,7 +1851,6 @@ static int ipmr_mfc_open(struct inode *inode, struct file *file)
        if (rc)
                goto out_kfree;
 
-       memset(s, 0, sizeof(*s));
        seq = file->private_data;
        seq->private = s;
 out:
@@ -1871,12 +1866,12 @@ static struct file_operations ipmr_mfc_fops = {
        .open    = ipmr_mfc_open,
        .read    = seq_read,
        .llseek  = seq_lseek,
-       .release = seq_release,
+       .release = seq_release_private,
 };
 #endif 
 
 #ifdef CONFIG_IP_PIMSM_V2
-static struct inet_protocol pim_protocol = {
+static struct net_protocol pim_protocol = {
        .handler        =       pim_rcv,
 };
 #endif