sctp: remove dup code in net/sctp/socket.c
[linux-2.6.git] / net / sctp / ipv6.c
index e82668b..a63de3f 100644 (file)
@@ -97,8 +97,7 @@ static int sctp_inet6addr_event(struct notifier_block *this, unsigned long ev,
                if (addr) {
                        addr->a.v6.sin6_family = AF_INET6;
                        addr->a.v6.sin6_port = 0;
-                       memcpy(&addr->a.v6.sin6_addr, &ifa->addr,
-                                sizeof(struct in6_addr));
+                       ipv6_addr_copy(&addr->a.v6.sin6_addr, &ifa->addr);
                        addr->a.v6.sin6_scope_id = ifa->idev->dev->ifindex;
                        addr->valid = 1;
                        spin_lock_bh(&sctp_local_addr_lock);
@@ -223,7 +222,7 @@ static int sctp_v6_xmit(struct sk_buff *skb, struct sctp_transport *transport)
                ipv6_addr_copy(&fl.fl6_dst, rt0->addr);
        }
 
-       SCTP_DEBUG_PRINTK("%s: skb:%p, len:%d, src:%p6 dst:%p6\n",
+       SCTP_DEBUG_PRINTK("%s: skb:%p, len:%d, src:%pI6 dst:%pI6\n",
                          __func__, skb, skb->len,
                          &fl.fl6_src, &fl.fl6_dst);
 
@@ -251,18 +250,18 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
                fl.oif = daddr->v6.sin6_scope_id;
 
 
-       SCTP_DEBUG_PRINTK("%s: DST=%p6 ", __func__, &fl.fl6_dst);
+       SCTP_DEBUG_PRINTK("%s: DST=%pI6 ", __func__, &fl.fl6_dst);
 
        if (saddr) {
                ipv6_addr_copy(&fl.fl6_src, &saddr->v6.sin6_addr);
-               SCTP_DEBUG_PRINTK("SRC=%p6 - ", &fl.fl6_src);
+               SCTP_DEBUG_PRINTK("SRC=%pI6 - ", &fl.fl6_src);
        }
 
        dst = ip6_route_output(&init_net, NULL, &fl);
        if (!dst->error) {
                struct rt6_info *rt;
                rt = (struct rt6_info *)dst;
-               SCTP_DEBUG_PRINTK("rt6_dst:%p6 rt6_src:%p6\n",
+               SCTP_DEBUG_PRINTK("rt6_dst:%pI6 rt6_src:%pI6\n",
                        &rt->rt6i_dst.addr, &rt->rt6i_src.addr);
                return dst;
        }
@@ -309,7 +308,7 @@ static void sctp_v6_get_saddr(struct sctp_sock *sk,
        __u8 matchlen = 0;
        __u8 bmatchlen;
 
-       SCTP_DEBUG_PRINTK("%s: asoc:%p dst:%p daddr:%p6 ",
+       SCTP_DEBUG_PRINTK("%s: asoc:%p dst:%p daddr:%pI6 ",
                          __func__, asoc, dst, &daddr->v6.sin6_addr);
 
        if (!asoc) {
@@ -318,7 +317,7 @@ static void sctp_v6_get_saddr(struct sctp_sock *sk,
                                   &daddr->v6.sin6_addr,
                                   inet6_sk(&sk->inet.sk)->srcprefs,
                                   &saddr->v6.sin6_addr);
-               SCTP_DEBUG_PRINTK("saddr from ipv6_get_saddr: %p6\n",
+               SCTP_DEBUG_PRINTK("saddr from ipv6_get_saddr: %pI6\n",
                                  &saddr->v6.sin6_addr);
                return;
        }
@@ -347,10 +346,10 @@ static void sctp_v6_get_saddr(struct sctp_sock *sk,
 
        if (baddr) {
                memcpy(saddr, baddr, sizeof(union sctp_addr));
-               SCTP_DEBUG_PRINTK("saddr: %p6\n", &saddr->v6.sin6_addr);
+               SCTP_DEBUG_PRINTK("saddr: %pI6\n", &saddr->v6.sin6_addr);
        } else {
                printk(KERN_ERR "%s: asoc:%p Could not find a valid source "
-                      "address for the dest:%p6\n",
+                      "address for the dest:%pI6\n",
                       __func__, asoc, &daddr->v6.sin6_addr);
        }
 
@@ -628,9 +627,7 @@ static sctp_scope_t sctp_v6_scope(union sctp_addr *addr)
 static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
                                             struct sctp_association *asoc)
 {
-       struct inet_sock *inet = inet_sk(sk);
        struct sock *newsk;
-       struct inet_sock *newinet;
        struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
        struct sctp6_sock *newsctp6sk;
 
@@ -640,17 +637,7 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
 
        sock_init_data(NULL, newsk);
 
-       newsk->sk_type = SOCK_STREAM;
-
-       newsk->sk_prot = sk->sk_prot;
-       newsk->sk_no_check = sk->sk_no_check;
-       newsk->sk_reuse = sk->sk_reuse;
-
-       newsk->sk_destruct = inet_sock_destruct;
-       newsk->sk_family = PF_INET6;
-       newsk->sk_protocol = IPPROTO_SCTP;
-       newsk->sk_backlog_rcv = sk->sk_prot->backlog_rcv;
-       newsk->sk_shutdown = sk->sk_shutdown;
+       sctp_copy_sock(newsk, sk, asoc);
        sock_reset_flag(sk, SOCK_ZAPPED);
 
        newsctp6sk = (struct sctp6_sock *)newsk;
@@ -658,7 +645,6 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
 
        sctp_sk(newsk)->v4mapped = sctp_sk(sk)->v4mapped;
 
-       newinet = inet_sk(newsk);
        newnp = inet6_sk(newsk);
 
        memcpy(newnp, np, sizeof(struct ipv6_pinfo));
@@ -666,26 +652,8 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk,
        /* Initialize sk's sport, dport, rcv_saddr and daddr for getsockname()
         * and getpeername().
         */
-       newinet->sport = inet->sport;
-       newnp->saddr = np->saddr;
-       newnp->rcv_saddr = np->rcv_saddr;
-       newinet->dport = htons(asoc->peer.port);
        sctp_v6_to_sk_daddr(&asoc->peer.primary_addr, newsk);
 
-       /* Init the ipv4 part of the socket since we can have sockets
-        * using v6 API for ipv4.
-        */
-       newinet->uc_ttl = -1;
-       newinet->mc_loop = 1;
-       newinet->mc_ttl = 1;
-       newinet->mc_index = 0;
-       newinet->mc_list = NULL;
-
-       if (ipv4_config.no_pmtu_disc)
-               newinet->pmtudisc = IP_PMTUDISC_DONT;
-       else
-               newinet->pmtudisc = IP_PMTUDISC_WANT;
-
        sk_refcnt_debug_inc(newsk);
 
        if (newsk->sk_prot->init(newsk)) {
@@ -720,7 +688,7 @@ static int sctp_v6_is_ce(const struct sk_buff *skb)
 /* Dump the v6 addr to the seq file. */
 static void sctp_v6_seq_dump_addr(struct seq_file *seq, union sctp_addr *addr)
 {
-       seq_printf(seq, "%p6 ", &addr->v6.sin6_addr);
+       seq_printf(seq, "%pI6 ", &addr->v6.sin6_addr);
 }
 
 static void sctp_v6_ecn_capable(struct sock *sk)