]> err.no Git - linux-2.6/blobdiff - net/sctp/output.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[linux-2.6] / net / sctp / output.c
index 5e811b91f21c8b6922fa37e7ca6fad3910c9e99c..45684646b1dba32a9e1c565713adc527c84095c3 100644 (file)
@@ -1,19 +1,19 @@
-/* SCTP kernel reference Implementation
+/* SCTP kernel implementation
  * (C) Copyright IBM Corp. 2001, 2004
  * Copyright (c) 1999-2000 Cisco, Inc.
  * Copyright (c) 1999-2001 Motorola, Inc.
  *
- * This file is part of the SCTP kernel reference Implementation
+ * This file is part of the SCTP kernel implementation
  *
  * These functions handle output processing.
  *
- * The SCTP reference implementation is free software;
+ * This SCTP implementation is free software;
  * you can redistribute it and/or modify it under the terms of
  * the GNU General Public License as published by
  * the Free Software Foundation; either version 2, or (at your option)
  * any later version.
  *
- * The SCTP reference implementation is distributed in the hope that it
+ * This SCTP implementation is distributed in the hope that it
  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  *                 ************************
  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@@ -50,6 +50,7 @@
 #include <linux/init.h>
 #include <net/inet_ecn.h>
 #include <net/icmp.h>
+#include <net/net_namespace.h>
 
 #ifndef TEST_FRAME
 #include <net/tcp.h>
@@ -74,7 +75,7 @@ struct sctp_packet *sctp_packet_config(struct sctp_packet *packet,
 {
        struct sctp_chunk *chunk = NULL;
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p vtag:0x%x\n", __FUNCTION__,
+       SCTP_DEBUG_PRINTK("%s: packet:%p vtag:0x%x\n", __func__,
                          packet, vtag);
 
        packet->vtag = vtag;
@@ -106,7 +107,7 @@ struct sctp_packet *sctp_packet_init(struct sctp_packet *packet,
        struct sctp_association *asoc = transport->asoc;
        size_t overhead;
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p transport:%p\n", __FUNCTION__,
+       SCTP_DEBUG_PRINTK("%s: packet:%p transport:%p\n", __func__,
                          packet, transport);
 
        packet->transport = transport;
@@ -138,7 +139,7 @@ void sctp_packet_free(struct sctp_packet *packet)
 {
        struct sctp_chunk *chunk, *tmp;
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p\n", __FUNCTION__, packet);
+       SCTP_DEBUG_PRINTK("%s: packet:%p\n", __func__, packet);
 
        list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) {
                list_del_init(&chunk->list);
@@ -157,12 +158,13 @@ void sctp_packet_free(struct sctp_packet *packet)
  * packet can be sent only after receiving the COOKIE_ACK.
  */
 sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet,
-                                      struct sctp_chunk *chunk)
+                                      struct sctp_chunk *chunk,
+                                      int one_packet)
 {
        sctp_xmit_t retval;
        int error = 0;
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __FUNCTION__,
+       SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __func__,
                          packet, chunk);
 
        switch ((retval = (sctp_packet_append_chunk(packet, chunk)))) {
@@ -175,7 +177,9 @@ sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet,
                        /* If we have an empty packet, then we can NOT ever
                         * return PMTU_FULL.
                         */
-                       retval = sctp_packet_append_chunk(packet, chunk);
+                       if (!one_packet)
+                               retval = sctp_packet_append_chunk(packet,
+                                                                 chunk);
                }
                break;
 
@@ -264,7 +268,7 @@ sctp_xmit_t sctp_packet_append_chunk(struct sctp_packet *packet,
        size_t pmtu;
        int too_big;
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __FUNCTION__, packet,
+       SCTP_DEBUG_PRINTK("%s: packet:%p chunk:%p\n", __func__, packet,
                          chunk);
 
        /* Try to bundle AUTH chunk */
@@ -361,7 +365,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
        struct sctp_transport *tp = packet->transport;
        struct sctp_association *asoc = tp->asoc;
        struct sctphdr *sh;
-       __u32 crc32 = 0;
+       __be32 crc32 = __constant_cpu_to_be32(0);
        struct sk_buff *nskb;
        struct sctp_chunk *chunk, *tmp;
        struct sock *sk;
@@ -372,7 +376,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
        unsigned char *auth = NULL;     /* pointer to auth in skb data */
        __u32 cksum_buf_len = sizeof(struct sctphdr);
 
-       SCTP_DEBUG_PRINTK("%s: packet:%p\n", __FUNCTION__, packet);
+       SCTP_DEBUG_PRINTK("%s: packet:%p\n", __func__, packet);
 
        /* Do NOT generate a chunkless packet. */
        if (list_empty(&packet->chunk_list))
@@ -534,7 +538,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
        /* 3) Put the resultant value into the checksum field in the
         *    common header, and leave the rest of the bits unchanged.
         */
-       sh->checksum = htonl(crc32);
+       sh->checksum = crc32;
 
        /* IP layer ECN support
         * From RFC 2481
@@ -548,7 +552,7 @@ int sctp_packet_transmit(struct sctp_packet *packet)
         * Note: The works for IPv6 layer checks this bit too later
         * in transmission.  See IP6_ECN_flow_xmit().
         */
-       INET_ECN_xmit(nskb->sk);
+       (*tp->af_specific->ecn_capable)(nskb->sk);
 
        /* Set up the IP options.  */
        /* BUG: not implemented
@@ -592,7 +596,7 @@ out:
        return err;
 no_route:
        kfree_skb(nskb);
-       IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
+       IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES);
 
        /* FIXME: Returning the 'err' will effect all the associations
         * associated with a socket, although only one of the paths of the
@@ -677,7 +681,7 @@ static sctp_xmit_t sctp_packet_append_data(struct sctp_packet *packet,
                                  "transport: %p, cwnd: %d, "
                                  "ssthresh: %d, flight_size: %d, "
                                  "pba: %d\n",
-                                 __FUNCTION__, transport,
+                                 __func__, transport,
                                  transport->cwnd,
                                  transport->ssthresh,
                                  transport->flight_size,