Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
[pandora-kernel.git] / include / net / flow.h
index 541ac13..7fe5a0f 100644 (file)
@@ -48,56 +48,98 @@ union flowi_uli {
        } mht;
 };
 
-struct flowi {
+struct flowi4 {
+       struct flowi_common     __fl_common;
+#define flowi4_oif             __fl_common.flowic_oif
+#define flowi4_iif             __fl_common.flowic_iif
+#define flowi4_mark            __fl_common.flowic_mark
+#define flowi4_tos             __fl_common.flowic_tos
+#define flowi4_scope           __fl_common.flowic_scope
+#define flowi4_proto           __fl_common.flowic_proto
+#define flowi4_flags           __fl_common.flowic_flags
+#define flowi4_secid           __fl_common.flowic_secid
+       __be32                  daddr;
+       __be32                  saddr;
+       union flowi_uli         uli;
+#define fl4_sport              uli.ports.sport
+#define fl4_dport              uli.ports.dport
+#define fl4_icmp_type          uli.icmpt.type
+#define fl4_icmp_code          uli.icmpt.code
+#define fl4_ipsec_spi          uli.spi
+#define fl4_mh_type            uli.mht.type
+#define fl4_gre_key            uli.gre_key
+};
+
+struct flowi6 {
        struct flowi_common     __fl_common;
-#define flowi_oif              __fl_common.flowic_oif
-#define flowi_iif              __fl_common.flowic_iif
-#define flowi_mark             __fl_common.flowic_mark
-#define flowi_tos              __fl_common.flowic_tos
-#define flowi_scope            __fl_common.flowic_scope
-#define flowi_proto            __fl_common.flowic_proto
-#define flowi_flags            __fl_common.flowic_flags
-#define flowi_secid            __fl_common.flowic_secid
+#define flowi6_oif             __fl_common.flowic_oif
+#define flowi6_iif             __fl_common.flowic_iif
+#define flowi6_mark            __fl_common.flowic_mark
+#define flowi6_tos             __fl_common.flowic_tos
+#define flowi6_scope           __fl_common.flowic_scope
+#define flowi6_proto           __fl_common.flowic_proto
+#define flowi6_flags           __fl_common.flowic_flags
+#define flowi6_secid           __fl_common.flowic_secid
+       struct in6_addr         daddr;
+       struct in6_addr         saddr;
+       __be32                  flowlabel;
+       union flowi_uli         uli;
+#define fl6_sport              uli.ports.sport
+#define fl6_dport              uli.ports.dport
+#define fl6_icmp_type          uli.icmpt.type
+#define fl6_icmp_code          uli.icmpt.code
+#define fl6_ipsec_spi          uli.spi
+#define fl6_mh_type            uli.mht.type
+#define fl6_gre_key            uli.gre_key
+};
 
+struct flowidn {
+       struct flowi_common     __fl_common;
+#define flowidn_oif            __fl_common.flowic_oif
+#define flowidn_iif            __fl_common.flowic_iif
+#define flowidn_mark           __fl_common.flowic_mark
+#define flowidn_scope          __fl_common.flowic_scope
+#define flowidn_proto          __fl_common.flowic_proto
+#define flowidn_flags          __fl_common.flowic_flags
+       __le16                  daddr;
+       __le16                  saddr;
+       union flowi_uli         uli;
+#define fld_sport              uli.ports.sport
+#define fld_dport              uli.ports.dport
+};
+
+struct flowi {
        union {
-               struct {
-                       __be32                  daddr;
-                       __be32                  saddr;
-               } ip4_u;
-               
-               struct {
-                       struct in6_addr         daddr;
-                       struct in6_addr         saddr;
-                       __be32                  flowlabel;
-               } ip6_u;
-
-               struct {
-                       __le16                  daddr;
-                       __le16                  saddr;
-                       __u8                    scope;
-               } dn_u;
-       } nl_u;
-#define fld_dst                nl_u.dn_u.daddr
-#define fld_src                nl_u.dn_u.saddr
-#define fld_scope      nl_u.dn_u.scope
-#define fl6_dst                nl_u.ip6_u.daddr
-#define fl6_src                nl_u.ip6_u.saddr
-#define fl6_flowlabel  nl_u.ip6_u.flowlabel
-#define fl4_dst                nl_u.ip4_u.daddr
-#define fl4_src                nl_u.ip4_u.saddr
-#define fl4_tos                flowi_tos
-#define fl4_scope      flowi_scope
-
-       union flowi_uli uli_u;
-#define fl_ip_sport    uli_u.ports.sport
-#define fl_ip_dport    uli_u.ports.dport
-#define fl_icmp_type   uli_u.icmpt.type
-#define fl_icmp_code   uli_u.icmpt.code
-#define fl_ipsec_spi   uli_u.spi
-#define fl_mh_type     uli_u.mht.type
-#define fl_gre_key     uli_u.gre_key
+               struct flowi_common     __fl_common;
+               struct flowi4           ip4;
+               struct flowi6           ip6;
+               struct flowidn          dn;
+       } u;
+#define flowi_oif      u.__fl_common.flowic_oif
+#define flowi_iif      u.__fl_common.flowic_iif
+#define flowi_mark     u.__fl_common.flowic_mark
+#define flowi_tos      u.__fl_common.flowic_tos
+#define flowi_scope    u.__fl_common.flowic_scope
+#define flowi_proto    u.__fl_common.flowic_proto
+#define flowi_flags    u.__fl_common.flowic_flags
+#define flowi_secid    u.__fl_common.flowic_secid
 } __attribute__((__aligned__(BITS_PER_LONG/8)));
 
+static inline struct flowi *flowi4_to_flowi(struct flowi4 *fl4)
+{
+       return container_of(fl4, struct flowi, u.ip4);
+}
+
+static inline struct flowi *flowi6_to_flowi(struct flowi6 *fl6)
+{
+       return container_of(fl6, struct flowi, u.ip6);
+}
+
+static inline struct flowi *flowidn_to_flowi(struct flowidn *fldn)
+{
+       return container_of(fldn, struct flowi, u.dn);
+}
+
 #define FLOW_DIR_IN    0
 #define FLOW_DIR_OUT   1
 #define FLOW_DIR_FWD   2
@@ -127,11 +169,4 @@ extern struct flow_cache_object *flow_cache_lookup(
 extern void flow_cache_flush(void);
 extern atomic_t flow_cache_genid;
 
-static inline int flow_cache_uli_match(const struct flowi *fl1,
-                                      const struct flowi *fl2)
-{
-       return (fl1->flowi_proto == fl2->flowi_proto &&
-               !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
-}
-
 #endif