__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 {
 #define flowi_proto    u.__fl_common.flowic_proto
 #define flowi_flags    u.__fl_common.flowic_flags
 #define flowi_secid    u.__fl_common.flowic_secid
-#define fl4_tos                flowi_tos
-#define fl4_scope      flowi_scope
 #define fld_scope      flowi_scope
 
 #define fld_dst                u.dn.daddr
 #define fl6_dst                u.ip6.daddr
 #define fl6_src                u.ip6.saddr
 #define fl6_flowlabel  u.ip6.flowlabel
-#define fl4_dst                u.ip4.daddr
-#define fl4_src                u.ip4.saddr
-#define fl4_sport      u.ip4.uli.ports.sport
-#define fl4_dport      u.ip4.uli.ports.dport
-#define fl4_icmp_type  u.ip4.uli.icmpt.type
-#define fl4_icmp_code  u.ip4.uli.icmpt.code
-#define fl4_ipsec_spi  u.ip4.uli.spi
-#define fl4_mh_type    u.ip4.uli.mht.type
-#define fl4_gre_key    u.ip4.uli.gre_key
 #define fl6_sport      u.ip6.uli.ports.sport
 #define fl6_dport      u.ip6.uli.ports.dport
 #define fl6_icmp_type  u.ip6.uli.icmpt.type
 
                .saddr = saddr,
                .flowi4_tos = tos,
                .flowi4_proto = proto,
-               .uli.ports.dport = dport,
-               .uli.ports.sport = sport,
+               .fl4_dport = dport,
+               .fl4_sport = sport,
        };
        if (sk)
                security_sk_classify_flow(sk, flowi4_to_flowi(&fl4));
                .saddr = saddr,
                .flowi4_tos = tos,
                .flowi4_proto = IPPROTO_GRE,
-               .uli.gre_key = gre_key,
+               .fl4_gre_key = gre_key,
        };
        return ip_route_output_key(net, &fl4);
 }
                .saddr = src,
                .flowi4_tos = tos,
                .flowi4_proto = protocol,
-               .uli.ports.sport = sport,
-               .uli.ports.dport = dport,
+               .fl4_sport = sport,
+               .fl4_dport = dport,
        };
        struct net *net = sock_net(sk);
        struct rtable *rt;
                        .saddr = rt->rt_key_src,
                        .flowi4_tos = rt->rt_tos,
                        .flowi4_proto = protocol,
-                       .uli.ports.sport = sport,
-                       .uli.ports.dport = dport
+                       .fl4_sport = sport,
+                       .fl4_dport = dport
                };
                if (inet_sk(sk)->transparent)
                        fl4.flowi4_flags |= FLOWI_FLAG_ANYSRC;
 
                .saddr = ip_hdr(skb)->daddr,
                .flowi4_tos = RT_CONN_FLAGS(sk),
                .flowi4_proto = sk->sk_protocol,
-               .uli.ports.sport = dccp_hdr(skb)->dccph_dport,
-               .uli.ports.dport = dccp_hdr(skb)->dccph_sport,
+               .fl4_sport = dccp_hdr(skb)->dccph_dport,
+               .fl4_dport = dccp_hdr(skb)->dccph_sport,
        };
 
        security_skb_classify_flow(skb, flowi4_to_flowi(&fl4));
 
                .saddr = saddr,
                .flowi4_tos = RT_TOS(tos),
                .flowi4_proto = IPPROTO_ICMP,
-               .uli.icmpt.type = type,
-               .uli.icmpt.code = code,
+               .fl4_icmp_type = type,
+               .fl4_icmp_code = code,
        };
        struct rtable *rt, *rt2;
        int err;
 
                .flowi4_tos = RT_CONN_FLAGS(sk),
                .flowi4_proto = sk->sk_protocol,
                .flowi4_flags = inet_sk_flowi_flags(sk),
-               .uli.ports.sport = inet_sk(sk)->inet_sport,
-               .uli.ports.dport = ireq->rmt_port,
+               .fl4_sport = inet_sk(sk)->inet_sport,
+               .fl4_dport = ireq->rmt_port,
        };
        struct net *net = sock_net(sk);
 
 
                        .daddr = daddr,
                        .saddr = rt->rt_spec_dst,
                        .flowi4_tos = RT_TOS(ip_hdr(skb)->tos),
-                       .uli.ports.sport = tcp_hdr(skb)->dest,
-                       .uli.ports.dport = tcp_hdr(skb)->source,
+                       .fl4_sport = tcp_hdr(skb)->dest,
+                       .fl4_dport = tcp_hdr(skb)->source,
                        .flowi4_proto = sk->sk_protocol,
                        .flowi4_flags = ip_reply_arg_flowi_flags(arg),
                };
 
                    t->dst.protonum == IPPROTO_UDPLITE ||
                    t->dst.protonum == IPPROTO_DCCP ||
                    t->dst.protonum == IPPROTO_SCTP)
-                       fl4->uli.ports.dport = t->dst.u.tcp.port;
+                       fl4->fl4_dport = t->dst.u.tcp.port;
        }
 
        statusbit ^= IPS_NAT_MASK;
                    t->dst.protonum == IPPROTO_UDPLITE ||
                    t->dst.protonum == IPPROTO_DCCP ||
                    t->dst.protonum == IPPROTO_SCTP)
-                       fl4->uli.ports.sport = t->src.u.tcp.port;
+                       fl4->fl4_sport = t->src.u.tcp.port;
        }
 }
 #endif
 
                                code = iov->iov_base;
 
                        if (type && code) {
-                               if (get_user(fl4->uli.icmpt.type, type) ||
-                                   get_user(fl4->uli.icmpt.code, code))
+                               if (get_user(fl4->fl4_icmp_type, type) ||
+                                   get_user(fl4->fl4_icmp_code, code))
                                        return -EFAULT;
                                probed = 1;
                        }
 
                        .flowi4_tos = RT_CONN_FLAGS(sk),
                        .flowi4_proto = IPPROTO_TCP,
                        .flowi4_flags = inet_sk_flowi_flags(sk),
-                       .uli.ports.sport = th->dest,
-                       .uli.ports.dport = th->source,
+                       .fl4_sport = th->dest,
+                       .fl4_dport = th->source,
                };
                security_req_classify_flow(req, flowi4_to_flowi(&fl4));
                rt = ip_route_output_key(sock_net(sk), &fl4);
 
        if (!skb)
                goto out;
 
-       err = udp_send_skb(skb, fl4->daddr, fl4->uli.ports.dport);
+       err = udp_send_skb(skb, fl4->daddr, fl4->fl4_dport);
 
 out:
        up->len = 0;
                        .flowi4_proto = sk->sk_protocol,
                        .flowi4_flags = (inet_sk_flowi_flags(sk) |
                                         FLOWI_FLAG_CAN_SLEEP),
-                       .uli.ports.sport = inet->inet_sport,
-                       .uli.ports.dport = dport,
+                       .fl4_sport = inet->inet_sport,
+                       .fl4_dport = dport,
                };
                struct net *net = sock_net(sk);
 
        fl4 = &inet->cork.fl.u.ip4;
        fl4->daddr = daddr;
        fl4->saddr = saddr;
-       fl4->uli.ports.dport = dport;
-       fl4->uli.ports.sport = inet->inet_sport;
+       fl4->fl4_dport = dport;
+       fl4->fl4_sport = inet->inet_sport;
        up->pending = AF_INET;
 
 do_append_data:
 
                            pskb_may_pull(skb, xprth + 4 - skb->data)) {
                                __be16 *ports = (__be16 *)xprth;
 
-                               fl4->uli.ports.sport = ports[!!reverse];
-                               fl4->uli.ports.dport = ports[!reverse];
+                               fl4->fl4_sport = ports[!!reverse];
+                               fl4->fl4_dport = ports[!reverse];
                        }
                        break;
 
                        if (pskb_may_pull(skb, xprth + 2 - skb->data)) {
                                u8 *icmp = xprth;
 
-                               fl4->uli.icmpt.type = icmp[0];
-                               fl4->uli.icmpt.code = icmp[1];
+                               fl4->fl4_icmp_type = icmp[0];
+                               fl4->fl4_icmp_code = icmp[1];
                        }
                        break;
 
                        if (pskb_may_pull(skb, xprth + 4 - skb->data)) {
                                __be32 *ehdr = (__be32 *)xprth;
 
-                               fl4->uli.spi = ehdr[0];
+                               fl4->fl4_ipsec_spi = ehdr[0];
                        }
                        break;
 
                        if (pskb_may_pull(skb, xprth + 8 - skb->data)) {
                                __be32 *ah_hdr = (__be32*)xprth;
 
-                               fl4->uli.spi = ah_hdr[1];
+                               fl4->fl4_ipsec_spi = ah_hdr[1];
                        }
                        break;
 
                        if (pskb_may_pull(skb, xprth + 4 - skb->data)) {
                                __be16 *ipcomp_hdr = (__be16 *)xprth;
 
-                               fl4->uli.spi = htonl(ntohs(ipcomp_hdr[1]));
+                               fl4->fl4_ipsec_spi = htonl(ntohs(ipcomp_hdr[1]));
                        }
                        break;
 
                                if (greflags[0] & GRE_KEY) {
                                        if (greflags[0] & GRE_CSUM)
                                                gre_hdr++;
-                                       fl4->uli.gre_key = gre_hdr[1];
+                                       fl4->fl4_gre_key = gre_hdr[1];
                                }
                        }
                        break;
 
                default:
-                       fl4->uli.spi = 0;
+                       fl4->fl4_ipsec_spi = 0;
                        break;
                }
        }
 
 
        memset(&fl4, 0x0, sizeof(struct flowi4));
        fl4.daddr  = daddr->v4.sin_addr.s_addr;
-       fl4.uli.ports.dport = daddr->v4.sin_port;
+       fl4.fl4_dport = daddr->v4.sin_port;
        fl4.flowi4_proto = IPPROTO_SCTP;
        if (asoc) {
                fl4.flowi4_tos = RT_CONN_FLAGS(asoc->base.sk);
                fl4.flowi4_oif = asoc->base.sk->sk_bound_dev_if;
-               fl4.uli.ports.sport = htons(asoc->base.bind_addr.port);
+               fl4.fl4_sport = htons(asoc->base.bind_addr.port);
        }
        if (saddr) {
                fl4.saddr = saddr->v4.sin_addr.s_addr;
-               fl4.uli.ports.sport = saddr->v4.sin_port;
+               fl4.fl4_sport = saddr->v4.sin_port;
        }
 
        SCTP_DEBUG_PRINTK("%s: DST:%pI4, SRC:%pI4 - ",
                if ((laddr->state == SCTP_ADDR_SRC) &&
                    (AF_INET == laddr->a.sa.sa_family)) {
                        fl4.saddr = laddr->a.v4.sin_addr.s_addr;
-                       fl4.uli.ports.sport = laddr->a.v4.sin_port;
+                       fl4.fl4_sport = laddr->a.v4.sin_port;
                        rt = ip_route_output_key(&init_net, &fl4);
                        if (!IS_ERR(rt)) {
                                dst = &rt->dst;