unsigned long   rate_limit;             /* Traffic shaping (NI)         */
        unsigned char   threshold;              /* TTL threshold                */
        unsigned short  flags;                  /* Control flags                */
-       __u32           local,remote;           /* Addresses(remote for tunnels)*/
+       __be32          local,remote;           /* Addresses(remote for tunnels)*/
        int             link;                   /* Physical interface index     */
 };
 
 struct mfc_cache 
 {
        struct mfc_cache *next;                 /* Next entry on cache line     */
-       __u32 mfc_mcastgrp;                     /* Group the entry belongs to   */
-       __u32 mfc_origin;                       /* Source of packet             */
+       __be32 mfc_mcastgrp;                    /* Group the entry belongs to   */
+       __be32 mfc_origin;                      /* Source of packet             */
        vifi_t mfc_parent;                      /* Source interface             */
        int mfc_flags;                          /* Flags on line                */
 
 #define MFC_LINES              64
 
 #ifdef __BIG_ENDIAN
-#define MFC_HASH(a,b)  ((((a)>>24)^((b)>>26))&(MFC_LINES-1))
+#define MFC_HASH(a,b)  (((((__force u32)(__be32)a)>>24)^(((__force u32)(__be32)b)>>26))&(MFC_LINES-1))
 #else
-#define MFC_HASH(a,b)  (((a)^((b)>>2))&(MFC_LINES-1))
+#define MFC_HASH(a,b)  ((((__force u32)(__be32)a)^(((__force u32)(__be32)b)>>2))&(MFC_LINES-1))
 #endif         
 
 #endif
 
        return 0;
 }
 
-static struct mfc_cache *ipmr_cache_find(__u32 origin, __u32 mcastgrp)
+static struct mfc_cache *ipmr_cache_find(__be32 origin, __be32 mcastgrp)
 {
        int line=MFC_HASH(mcastgrp,origin);
        struct mfc_cache *c;
  *     important for multicast video.
  */
  
-static void ip_encap(struct sk_buff *skb, u32 saddr, u32 daddr)
+static void ip_encap(struct sk_buff *skb, __be32 saddr, __be32 daddr)
 {
        struct iphdr *iph = (struct iphdr *)skb_push(skb,sizeof(struct iphdr));