[SCTP]: Introduce sctp_hdr()
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 13 Mar 2007 16:59:32 +0000 (13:59 -0300)
committerDavid S. Miller <davem@sunset.davemloft.net>
Thu, 26 Apr 2007 05:25:19 +0000 (22:25 -0700)
For consistency with all the other skb->h.raw accessors.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/sctp.h
net/sctp/input.c
net/sctp/ipv6.c
net/sctp/protocol.c

index d4f86560bfff550dbfd15b59bfcccb08cd347a86..d76767dfe59e5f563eaefef6c49ff057aba270d8 100644 (file)
@@ -63,6 +63,15 @@ typedef struct sctphdr {
        __be32 checksum;
 } __attribute__((packed)) sctp_sctphdr_t;
 
+#ifdef __KERNEL__
+#include <linux/skbuff.h>
+
+static inline struct sctphdr *sctp_hdr(const struct sk_buff *skb)
+{
+       return (struct sctphdr *)skb->h.raw;
+}
+#endif
+
 /* Section 3.2.  Chunk Field Descriptions. */
 typedef struct sctp_chunkhdr {
        __u8 type;
index 9311b5ddf5c0f4ffff8f05c19df9efc955053e7d..3a322c584c74a79993e5fdcc9ba7053ea8797a69 100644 (file)
@@ -79,14 +79,10 @@ static void sctp_add_backlog(struct sock *sk, struct sk_buff *skb);
 /* Calculate the SCTP checksum of an SCTP packet.  */
 static inline int sctp_rcv_checksum(struct sk_buff *skb)
 {
-       struct sctphdr *sh;
-       __u32 cmp, val;
        struct sk_buff *list = skb_shinfo(skb)->frag_list;
-
-       sh = (struct sctphdr *) skb->h.raw;
-       cmp = ntohl(sh->checksum);
-
-       val = sctp_start_cksum((__u8 *)sh, skb_headlen(skb));
+       struct sctphdr *sh = sctp_hdr(skb);
+       __u32 cmp = ntohl(sh->checksum);
+       __u32 val = sctp_start_cksum((__u8 *)sh, skb_headlen(skb));
 
        for (; list; list = list->next)
                val = sctp_update_cksum((__u8 *)list->data, skb_headlen(list),
@@ -138,7 +134,7 @@ int sctp_rcv(struct sk_buff *skb)
        if (skb_linearize(skb))
                goto discard_it;
 
-       sh = (struct sctphdr *) skb->h.raw;
+       sh = sctp_hdr(skb);
 
        /* Pull up the IP and SCTP headers. */
        __skb_pull(skb, skb_transport_offset(skb));
@@ -905,7 +901,7 @@ static struct sctp_association *__sctp_rcv_init_lookup(struct sk_buff *skb,
        struct sctp_association *asoc;
        union sctp_addr addr;
        union sctp_addr *paddr = &addr;
-       struct sctphdr *sh = (struct sctphdr *) skb->h.raw;
+       struct sctphdr *sh = sctp_hdr(skb);
        sctp_chunkhdr_t *ch;
        union sctp_params params;
        sctp_init_chunk_t *init;
index 001be2de0b3cdd4a08ace00bc6f2a1082885db47..0992bc5bb528dceb4742eeee427ef94ec06be60b 100644 (file)
@@ -390,7 +390,7 @@ static void sctp_v6_from_skb(union sctp_addr *addr,struct sk_buff *skb,
        addr->v6.sin6_flowinfo = 0; /* FIXME */
        addr->v6.sin6_scope_id = ((struct inet6_skb_parm *)skb->cb)->iif;
 
-       sh = (struct sctphdr *) skb->h.raw;
+       sh = sctp_hdr(skb);
        if (is_saddr) {
                *port  = sh->source;
                from = &ipv6_hdr(skb)->saddr;
@@ -765,7 +765,7 @@ static void sctp_inet6_skb_msgname(struct sk_buff *skb, char *msgname,
        if (msgname) {
                sctp_inet6_msgname(msgname, addr_len);
                sin6 = (struct sockaddr_in6 *)msgname;
-               sh = (struct sctphdr *)skb->h.raw;
+               sh = sctp_hdr(skb);
                sin6->sin6_port = sh->source;
 
                /* Map ipv4 address into v4-mapped-on-v6 address. */
index 08f92ba4ebd7e5758bed6f18672127cdd4f5c08e..7c28c9b959e26bf95fd7e966df9dbc8fbce8d5b1 100644 (file)
@@ -235,7 +235,7 @@ static void sctp_v4_from_skb(union sctp_addr *addr, struct sk_buff *skb,
        port = &addr->v4.sin_port;
        addr->v4.sin_family = AF_INET;
 
-       sh = (struct sctphdr *) skb->h.raw;
+       sh = sctp_hdr(skb);
        if (is_saddr) {
                *port  = sh->source;
                from = &ip_hdr(skb)->saddr;
@@ -731,13 +731,11 @@ static void sctp_inet_event_msgname(struct sctp_ulpevent *event, char *msgname,
 /* Initialize and copy out a msgname from an inbound skb. */
 static void sctp_inet_skb_msgname(struct sk_buff *skb, char *msgname, int *len)
 {
-       struct sctphdr *sh;
-       struct sockaddr_in *sin;
-
        if (msgname) {
+               struct sctphdr *sh = sctp_hdr(skb);
+               struct sockaddr_in *sin = (struct sockaddr_in *)msgname;
+
                sctp_inet_msgname(msgname, len);
-               sin = (struct sockaddr_in *)msgname;
-               sh = (struct sctphdr *)skb->h.raw;
                sin->sin_port = sh->source;
                sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
        }