Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

decnet: Convert to use flowidn where applicable.

Signed-off-by: David S. Miller <davem@davemloft.net>

+196 -185
+3 -3
include/net/dn.h
··· 192 192 ethaddr[5] = (__u8)(a >> 8); 193 193 } 194 194 195 - static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp) 195 + static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp) 196 196 { 197 - fl->u.dn.uli.ports.sport = scp->addrloc; 198 - fl->u.dn.uli.ports.dport = scp->addrrem; 197 + fld->fld_sport = scp->addrloc; 198 + fld->fld_dport = scp->addrrem; 199 199 } 200 200 201 201 extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu);
+4 -4
include/net/dn_fib.h
··· 98 98 int (*delete)(struct dn_fib_table *t, struct rtmsg *r, 99 99 struct dn_kern_rta *rta, struct nlmsghdr *n, 100 100 struct netlink_skb_parms *req); 101 - int (*lookup)(struct dn_fib_table *t, const struct flowi *fl, 101 + int (*lookup)(struct dn_fib_table *t, const struct flowidn *fld, 102 102 struct dn_fib_res *res); 103 103 int (*flush)(struct dn_fib_table *t); 104 104 int (*dump)(struct dn_fib_table *t, struct sk_buff *skb, struct netlink_callback *cb); ··· 119 119 struct dn_kern_rta *rta, 120 120 const struct nlmsghdr *nlh, int *errp); 121 121 extern int dn_fib_semantic_match(int type, struct dn_fib_info *fi, 122 - const struct flowi *fl, 122 + const struct flowidn *fld, 123 123 struct dn_fib_res *res); 124 124 extern void dn_fib_release_info(struct dn_fib_info *fi); 125 125 extern __le16 dn_fib_get_attr16(struct rtattr *attr, int attrlen, int type); 126 126 extern void dn_fib_flush(void); 127 - extern void dn_fib_select_multipath(const struct flowi *fl, 127 + extern void dn_fib_select_multipath(const struct flowidn *fld, 128 128 struct dn_fib_res *res); 129 129 130 130 /* ··· 141 141 extern void dn_fib_rules_init(void); 142 142 extern void dn_fib_rules_cleanup(void); 143 143 extern unsigned dnet_addr_type(__le16 addr); 144 - extern int dn_fib_lookup(struct flowi *fl, struct dn_fib_res *res); 144 + extern int dn_fib_lookup(struct flowidn *fld, struct dn_fib_res *res); 145 145 146 146 extern int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb); 147 147
+4 -4
include/net/dn_route.h
··· 16 16 *******************************************************************************/ 17 17 18 18 extern struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri); 19 - extern int dn_route_output_sock(struct dst_entry **pprt, struct flowi *, struct sock *sk, int flags); 19 + extern int dn_route_output_sock(struct dst_entry **pprt, struct flowidn *, struct sock *sk, int flags); 20 20 extern int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb); 21 21 extern void dn_rt_cache_flush(int delay); 22 22 ··· 67 67 struct dn_route { 68 68 struct dst_entry dst; 69 69 70 - struct flowi fl; 70 + struct flowidn fld; 71 71 72 72 __le16 rt_saddr; 73 73 __le16 rt_daddr; ··· 82 82 83 83 static inline bool dn_is_input_route(struct dn_route *rt) 84 84 { 85 - return rt->fl.flowi_iif != 0; 85 + return rt->fld.flowidn_iif != 0; 86 86 } 87 87 88 88 static inline bool dn_is_output_route(struct dn_route *rt) 89 89 { 90 - return rt->fl.flowi_iif == 0; 90 + return rt->fld.flowidn_iif == 0; 91 91 } 92 92 93 93 extern void dn_route_init(void);
+8 -4
include/net/flow.h
··· 95 95 96 96 struct flowidn { 97 97 struct flowi_common __fl_common; 98 + #define flowidn_oif __fl_common.flowic_oif 99 + #define flowidn_iif __fl_common.flowic_iif 100 + #define flowidn_mark __fl_common.flowic_mark 101 + #define flowidn_scope __fl_common.flowic_scope 102 + #define flowidn_proto __fl_common.flowic_proto 103 + #define flowidn_flags __fl_common.flowic_flags 98 104 __le16 daddr; 99 105 __le16 saddr; 100 106 union flowi_uli uli; 107 + #define fld_sport uli.ports.sport 108 + #define fld_dport uli.ports.dport 101 109 }; 102 110 103 111 struct flowi { ··· 123 115 #define flowi_proto u.__fl_common.flowic_proto 124 116 #define flowi_flags u.__fl_common.flowic_flags 125 117 #define flowi_secid u.__fl_common.flowic_secid 126 - #define fld_scope flowi_scope 127 - 128 - #define fld_dst u.dn.daddr 129 - #define fld_src u.dn.saddr 130 118 } __attribute__((__aligned__(BITS_PER_LONG/8))); 131 119 132 120 static inline struct flowi *flowi4_to_flowi(struct flowi4 *fl4)
+8 -8
net/decnet/af_decnet.c
··· 908 908 struct socket *sock = sk->sk_socket; 909 909 struct dn_scp *scp = DN_SK(sk); 910 910 int err = -EISCONN; 911 - struct flowi fl; 911 + struct flowidn fld; 912 912 913 913 if (sock->state == SS_CONNECTED) 914 914 goto out; ··· 947 947 memcpy(&scp->peer, addr, sizeof(struct sockaddr_dn)); 948 948 949 949 err = -EHOSTUNREACH; 950 - memset(&fl, 0, sizeof(fl)); 951 - fl.flowi_oif = sk->sk_bound_dev_if; 952 - fl.fld_dst = dn_saddr2dn(&scp->peer); 953 - fl.fld_src = dn_saddr2dn(&scp->addr); 954 - dn_sk_ports_copy(&fl, scp); 955 - fl.flowi_proto = DNPROTO_NSP; 956 - if (dn_route_output_sock(&sk->sk_dst_cache, &fl, sk, flags) < 0) 950 + memset(&fld, 0, sizeof(fld)); 951 + fld.flowidn_oif = sk->sk_bound_dev_if; 952 + fld.daddr = dn_saddr2dn(&scp->peer); 953 + fld.saddr = dn_saddr2dn(&scp->addr); 954 + dn_sk_ports_copy(&fld, scp); 955 + fld.flowidn_proto = DNPROTO_NSP; 956 + if (dn_route_output_sock(&sk->sk_dst_cache, &fld, sk, flags) < 0) 957 957 goto out; 958 958 sk->sk_route_caps = sk->sk_dst_cache->dev->features; 959 959 sock->state = SS_CONNECTING;
+12 -11
net/decnet/dn_fib.c
··· 201 201 int err; 202 202 203 203 if (nh->nh_gw) { 204 - struct flowi fl; 204 + struct flowidn fld; 205 205 struct dn_fib_res res; 206 206 207 207 if (nh->nh_flags&RTNH_F_ONLINK) { ··· 221 221 return 0; 222 222 } 223 223 224 - memset(&fl, 0, sizeof(fl)); 225 - fl.fld_dst = nh->nh_gw; 226 - fl.flowi_oif = nh->nh_oif; 227 - fl.fld_scope = r->rtm_scope + 1; 224 + memset(&fld, 0, sizeof(fld)); 225 + fld.daddr = nh->nh_gw; 226 + fld.flowidn_oif = nh->nh_oif; 227 + fld.flowidn_scope = r->rtm_scope + 1; 228 228 229 - if (fl.fld_scope < RT_SCOPE_LINK) 230 - fl.fld_scope = RT_SCOPE_LINK; 229 + if (fld.flowidn_scope < RT_SCOPE_LINK) 230 + fld.flowidn_scope = RT_SCOPE_LINK; 231 231 232 - if ((err = dn_fib_lookup(&fl, &res)) != 0) 232 + if ((err = dn_fib_lookup(&fld, &res)) != 0) 233 233 return err; 234 234 235 235 err = -EINVAL; ··· 404 404 return NULL; 405 405 } 406 406 407 - int dn_fib_semantic_match(int type, struct dn_fib_info *fi, const struct flowi *fl, struct dn_fib_res *res) 407 + int dn_fib_semantic_match(int type, struct dn_fib_info *fi, const struct flowidn *fld, struct dn_fib_res *res) 408 408 { 409 409 int err = dn_fib_props[type].error; 410 410 ··· 424 424 for_nexthops(fi) { 425 425 if (nh->nh_flags & RTNH_F_DEAD) 426 426 continue; 427 - if (!fl->flowi_oif || fl->flowi_oif == nh->nh_oif) 427 + if (!fld->flowidn_oif || 428 + fld->flowidn_oif == nh->nh_oif) 428 429 break; 429 430 } 430 431 if (nhsel < fi->fib_nhs) { ··· 446 445 return err; 447 446 } 448 447 449 - void dn_fib_select_multipath(const struct flowi *fl, struct dn_fib_res *res) 448 + void dn_fib_select_multipath(const struct flowidn *fld, struct dn_fib_res *res) 450 449 { 451 450 struct dn_fib_info *fi = res->fi; 452 451 int w;
+8 -8
net/decnet/dn_nsp_out.c
··· 78 78 struct sock *sk = skb->sk; 79 79 struct dn_scp *scp = DN_SK(sk); 80 80 struct dst_entry *dst; 81 - struct flowi fl; 81 + struct flowidn fld; 82 82 83 83 skb_reset_transport_header(skb); 84 84 scp->stamp = jiffies; ··· 91 91 return; 92 92 } 93 93 94 - memset(&fl, 0, sizeof(fl)); 95 - fl.flowi_oif = sk->sk_bound_dev_if; 96 - fl.fld_src = dn_saddr2dn(&scp->addr); 97 - fl.fld_dst = dn_saddr2dn(&scp->peer); 98 - dn_sk_ports_copy(&fl, scp); 99 - fl.flowi_proto = DNPROTO_NSP; 100 - if (dn_route_output_sock(&sk->sk_dst_cache, &fl, sk, 0) == 0) { 94 + memset(&fld, 0, sizeof(fld)); 95 + fld.flowidn_oif = sk->sk_bound_dev_if; 96 + fld.saddr = dn_saddr2dn(&scp->addr); 97 + fld.daddr = dn_saddr2dn(&scp->peer); 98 + dn_sk_ports_copy(&fld, scp); 99 + fld.flowidn_proto = DNPROTO_NSP; 100 + if (dn_route_output_sock(&sk->sk_dst_cache, &fld, sk, 0) == 0) { 101 101 dst = sk_dst_get(sk); 102 102 sk->sk_route_caps = dst->dev->features; 103 103 goto try_again;
+136 -133
net/decnet/dn_route.c
··· 282 282 { 283 283 } 284 284 285 - static inline int compare_keys(struct flowi *fl1, struct flowi *fl2) 285 + static inline int compare_keys(struct flowidn *fl1, struct flowidn *fl2) 286 286 { 287 - return ((fl1->fld_dst ^ fl2->fld_dst) | 288 - (fl1->fld_src ^ fl2->fld_src) | 289 - (fl1->flowi_mark ^ fl2->flowi_mark) | 290 - (fl1->fld_scope ^ fl2->fld_scope) | 291 - (fl1->flowi_oif ^ fl2->flowi_oif) | 292 - (fl1->flowi_iif ^ fl2->flowi_iif)) == 0; 287 + return ((fl1->daddr ^ fl2->daddr) | 288 + (fl1->saddr ^ fl2->saddr) | 289 + (fl1->flowidn_mark ^ fl2->flowidn_mark) | 290 + (fl1->flowidn_scope ^ fl2->flowidn_scope) | 291 + (fl1->flowidn_oif ^ fl2->flowidn_oif) | 292 + (fl1->flowidn_iif ^ fl2->flowidn_iif)) == 0; 293 293 } 294 294 295 295 static int dn_insert_route(struct dn_route *rt, unsigned hash, struct dn_route **rp) ··· 303 303 spin_lock_bh(&dn_rt_hash_table[hash].lock); 304 304 while ((rth = rcu_dereference_protected(*rthp, 305 305 lockdep_is_held(&dn_rt_hash_table[hash].lock))) != NULL) { 306 - if (compare_keys(&rth->fl, &rt->fl)) { 306 + if (compare_keys(&rth->fld, &rt->fld)) { 307 307 /* Put it first */ 308 308 *rthp = rth->dst.dn_next; 309 309 rcu_assign_pointer(rth->dst.dn_next, ··· 903 903 return (daddr&~mask)|res->fi->fib_nh->nh_gw; 904 904 } 905 905 906 - static int dn_route_output_slow(struct dst_entry **pprt, const struct flowi *oldflp, int try_hard) 906 + static int dn_route_output_slow(struct dst_entry **pprt, const struct flowidn *oldflp, int try_hard) 907 907 { 908 - struct flowi fl = { 909 - .fld_dst = oldflp->fld_dst, 910 - .fld_src = oldflp->fld_src, 911 - .fld_scope = RT_SCOPE_UNIVERSE, 912 - .flowi_mark = oldflp->flowi_mark, 913 - .flowi_iif = init_net.loopback_dev->ifindex, 914 - .flowi_oif = oldflp->flowi_oif, 908 + struct flowidn fld = { 909 + .daddr = oldflp->daddr, 910 + .saddr = oldflp->saddr, 911 + .flowidn_scope = RT_SCOPE_UNIVERSE, 912 + .flowidn_mark = oldflp->flowidn_mark, 913 + .flowidn_iif = init_net.loopback_dev->ifindex, 914 + .flowidn_oif = oldflp->flowidn_oif, 915 915 }; 916 916 struct dn_route *rt = NULL; 917 917 struct net_device *dev_out = NULL, *dev; ··· 926 926 if (decnet_debug_level & 16) 927 927 printk(KERN_DEBUG 928 928 "dn_route_output_slow: dst=%04x src=%04x mark=%d" 929 - " iif=%d oif=%d\n", le16_to_cpu(oldflp->fld_dst), 930 - le16_to_cpu(oldflp->fld_src), 931 - oldflp->flowi_mark, init_net.loopback_dev->ifindex, oldflp->flowi_oif); 929 + " iif=%d oif=%d\n", le16_to_cpu(oldflp->daddr), 930 + le16_to_cpu(oldflp->saddr), 931 + oldflp->flowidn_mark, init_net.loopback_dev->ifindex, 932 + oldflp->flowidn_oif); 932 933 933 934 /* If we have an output interface, verify its a DECnet device */ 934 - if (oldflp->flowi_oif) { 935 - dev_out = dev_get_by_index(&init_net, oldflp->flowi_oif); 935 + if (oldflp->flowidn_oif) { 936 + dev_out = dev_get_by_index(&init_net, oldflp->flowidn_oif); 936 937 err = -ENODEV; 937 938 if (dev_out && dev_out->dn_ptr == NULL) { 938 939 dev_put(dev_out); ··· 944 943 } 945 944 946 945 /* If we have a source address, verify that its a local address */ 947 - if (oldflp->fld_src) { 946 + if (oldflp->saddr) { 948 947 err = -EADDRNOTAVAIL; 949 948 950 949 if (dev_out) { 951 - if (dn_dev_islocal(dev_out, oldflp->fld_src)) 950 + if (dn_dev_islocal(dev_out, oldflp->saddr)) 952 951 goto source_ok; 953 952 dev_put(dev_out); 954 953 goto out; ··· 957 956 for_each_netdev_rcu(&init_net, dev) { 958 957 if (!dev->dn_ptr) 959 958 continue; 960 - if (!dn_dev_islocal(dev, oldflp->fld_src)) 959 + if (!dn_dev_islocal(dev, oldflp->saddr)) 961 960 continue; 962 961 if ((dev->flags & IFF_LOOPBACK) && 963 - oldflp->fld_dst && 964 - !dn_dev_islocal(dev, oldflp->fld_dst)) 962 + oldflp->daddr && 963 + !dn_dev_islocal(dev, oldflp->daddr)) 965 964 continue; 966 965 967 966 dev_out = dev; ··· 976 975 } 977 976 978 977 /* No destination? Assume its local */ 979 - if (!fl.fld_dst) { 980 - fl.fld_dst = fl.fld_src; 978 + if (!fld.daddr) { 979 + fld.daddr = fld.saddr; 981 980 982 981 err = -EADDRNOTAVAIL; 983 982 if (dev_out) 984 983 dev_put(dev_out); 985 984 dev_out = init_net.loopback_dev; 986 985 dev_hold(dev_out); 987 - if (!fl.fld_dst) { 988 - fl.fld_dst = 989 - fl.fld_src = dnet_select_source(dev_out, 0, 986 + if (!fld.daddr) { 987 + fld.daddr = 988 + fld.saddr = dnet_select_source(dev_out, 0, 990 989 RT_SCOPE_HOST); 991 - if (!fl.fld_dst) 990 + if (!fld.daddr) 992 991 goto out; 993 992 } 994 - fl.flowi_oif = init_net.loopback_dev->ifindex; 993 + fld.flowidn_oif = init_net.loopback_dev->ifindex; 995 994 res.type = RTN_LOCAL; 996 995 goto make_route; 997 996 } ··· 1000 999 printk(KERN_DEBUG 1001 1000 "dn_route_output_slow: initial checks complete." 1002 1001 " dst=%o4x src=%04x oif=%d try_hard=%d\n", 1003 - le16_to_cpu(fl.fld_dst), le16_to_cpu(fl.fld_src), 1004 - fl.flowi_oif, try_hard); 1002 + le16_to_cpu(fld.daddr), le16_to_cpu(fld.saddr), 1003 + fld.flowidn_oif, try_hard); 1005 1004 1006 1005 /* 1007 1006 * N.B. If the kernel is compiled without router support then ··· 1009 1008 * will always be executed. 1010 1009 */ 1011 1010 err = -ESRCH; 1012 - if (try_hard || (err = dn_fib_lookup(&fl, &res)) != 0) { 1011 + if (try_hard || (err = dn_fib_lookup(&fld, &res)) != 0) { 1013 1012 struct dn_dev *dn_db; 1014 1013 if (err != -ESRCH) 1015 1014 goto out; ··· 1024 1023 * here 1025 1024 */ 1026 1025 if (!try_hard) { 1027 - neigh = neigh_lookup_nodev(&dn_neigh_table, &init_net, &fl.fld_dst); 1026 + neigh = neigh_lookup_nodev(&dn_neigh_table, &init_net, &fld.daddr); 1028 1027 if (neigh) { 1029 - if ((oldflp->flowi_oif && 1030 - (neigh->dev->ifindex != oldflp->flowi_oif)) || 1031 - (oldflp->fld_src && 1028 + if ((oldflp->flowidn_oif && 1029 + (neigh->dev->ifindex != oldflp->flowidn_oif)) || 1030 + (oldflp->saddr && 1032 1031 (!dn_dev_islocal(neigh->dev, 1033 - oldflp->fld_src)))) { 1032 + oldflp->saddr)))) { 1034 1033 neigh_release(neigh); 1035 1034 neigh = NULL; 1036 1035 } else { 1037 1036 if (dev_out) 1038 1037 dev_put(dev_out); 1039 - if (dn_dev_islocal(neigh->dev, fl.fld_dst)) { 1038 + if (dn_dev_islocal(neigh->dev, fld.daddr)) { 1040 1039 dev_out = init_net.loopback_dev; 1041 1040 res.type = RTN_LOCAL; 1042 1041 } else { ··· 1056 1055 goto out; 1057 1056 dn_db = rcu_dereference_raw(dev_out->dn_ptr); 1058 1057 /* Possible improvement - check all devices for local addr */ 1059 - if (dn_dev_islocal(dev_out, fl.fld_dst)) { 1058 + if (dn_dev_islocal(dev_out, fld.daddr)) { 1060 1059 dev_put(dev_out); 1061 1060 dev_out = init_net.loopback_dev; 1062 1061 dev_hold(dev_out); ··· 1072 1071 if (neigh) 1073 1072 gateway = ((struct dn_neigh *)neigh)->addr; 1074 1073 if (gateway == 0) 1075 - gateway = fl.fld_dst; 1076 - if (fl.fld_src == 0) { 1077 - fl.fld_src = dnet_select_source(dev_out, gateway, 1078 - res.type == RTN_LOCAL ? 1079 - RT_SCOPE_HOST : 1080 - RT_SCOPE_LINK); 1081 - if (fl.fld_src == 0 && res.type != RTN_LOCAL) 1074 + gateway = fld.daddr; 1075 + if (fld.saddr == 0) { 1076 + fld.saddr = dnet_select_source(dev_out, gateway, 1077 + res.type == RTN_LOCAL ? 1078 + RT_SCOPE_HOST : 1079 + RT_SCOPE_LINK); 1080 + if (fld.saddr == 0 && res.type != RTN_LOCAL) 1082 1081 goto e_addr; 1083 1082 } 1084 - fl.flowi_oif = dev_out->ifindex; 1083 + fld.flowidn_oif = dev_out->ifindex; 1085 1084 goto make_route; 1086 1085 } 1087 1086 free_res = 1; ··· 1090 1089 goto e_inval; 1091 1090 1092 1091 if (res.type == RTN_LOCAL) { 1093 - if (!fl.fld_src) 1094 - fl.fld_src = fl.fld_dst; 1092 + if (!fld.saddr) 1093 + fld.saddr = fld.daddr; 1095 1094 if (dev_out) 1096 1095 dev_put(dev_out); 1097 1096 dev_out = init_net.loopback_dev; 1098 1097 dev_hold(dev_out); 1099 - fl.flowi_oif = dev_out->ifindex; 1098 + fld.flowidn_oif = dev_out->ifindex; 1100 1099 if (res.fi) 1101 1100 dn_fib_info_put(res.fi); 1102 1101 res.fi = NULL; 1103 1102 goto make_route; 1104 1103 } 1105 1104 1106 - if (res.fi->fib_nhs > 1 && fl.flowi_oif == 0) 1107 - dn_fib_select_multipath(&fl, &res); 1105 + if (res.fi->fib_nhs > 1 && fld.flowidn_oif == 0) 1106 + dn_fib_select_multipath(&fld, &res); 1108 1107 1109 1108 /* 1110 1109 * We could add some logic to deal with default routes here and 1111 1110 * get rid of some of the special casing above. 1112 1111 */ 1113 1112 1114 - if (!fl.fld_src) 1115 - fl.fld_src = DN_FIB_RES_PREFSRC(res); 1113 + if (!fld.saddr) 1114 + fld.saddr = DN_FIB_RES_PREFSRC(res); 1116 1115 1117 1116 if (dev_out) 1118 1117 dev_put(dev_out); 1119 1118 dev_out = DN_FIB_RES_DEV(res); 1120 1119 dev_hold(dev_out); 1121 - fl.flowi_oif = dev_out->ifindex; 1120 + fld.flowidn_oif = dev_out->ifindex; 1122 1121 gateway = DN_FIB_RES_GW(res); 1123 1122 1124 1123 make_route: ··· 1132 1131 atomic_set(&rt->dst.__refcnt, 1); 1133 1132 rt->dst.flags = DST_HOST; 1134 1133 1135 - rt->fl.fld_src = oldflp->fld_src; 1136 - rt->fl.fld_dst = oldflp->fld_dst; 1137 - rt->fl.flowi_oif = oldflp->flowi_oif; 1138 - rt->fl.flowi_iif = 0; 1139 - rt->fl.flowi_mark = oldflp->flowi_mark; 1134 + rt->fld.saddr = oldflp->saddr; 1135 + rt->fld.daddr = oldflp->daddr; 1136 + rt->fld.flowidn_oif = oldflp->flowidn_oif; 1137 + rt->fld.flowidn_iif = 0; 1138 + rt->fld.flowidn_mark = oldflp->flowidn_mark; 1140 1139 1141 - rt->rt_saddr = fl.fld_src; 1142 - rt->rt_daddr = fl.fld_dst; 1143 - rt->rt_gateway = gateway ? gateway : fl.fld_dst; 1144 - rt->rt_local_src = fl.fld_src; 1140 + rt->rt_saddr = fld.saddr; 1141 + rt->rt_daddr = fld.daddr; 1142 + rt->rt_gateway = gateway ? gateway : fld.daddr; 1143 + rt->rt_local_src = fld.saddr; 1145 1144 1146 - rt->rt_dst_map = fl.fld_dst; 1147 - rt->rt_src_map = fl.fld_src; 1145 + rt->rt_dst_map = fld.daddr; 1146 + rt->rt_src_map = fld.saddr; 1148 1147 1149 1148 rt->dst.dev = dev_out; 1150 1149 dev_hold(dev_out); ··· 1162 1161 if (err) 1163 1162 goto e_neighbour; 1164 1163 1165 - hash = dn_hash(rt->fl.fld_src, rt->fl.fld_dst); 1164 + hash = dn_hash(rt->fld.saddr, rt->fld.daddr); 1166 1165 dn_insert_route(rt, hash, (struct dn_route **)pprt); 1167 1166 1168 1167 done: ··· 1193 1192 /* 1194 1193 * N.B. The flags may be moved into the flowi at some future stage. 1195 1194 */ 1196 - static int __dn_route_output_key(struct dst_entry **pprt, const struct flowi *flp, int flags) 1195 + static int __dn_route_output_key(struct dst_entry **pprt, const struct flowidn *flp, int flags) 1197 1196 { 1198 - unsigned hash = dn_hash(flp->fld_src, flp->fld_dst); 1197 + unsigned hash = dn_hash(flp->saddr, flp->daddr); 1199 1198 struct dn_route *rt = NULL; 1200 1199 1201 1200 if (!(flags & MSG_TRYHARD)) { 1202 1201 rcu_read_lock_bh(); 1203 1202 for (rt = rcu_dereference_bh(dn_rt_hash_table[hash].chain); rt; 1204 1203 rt = rcu_dereference_bh(rt->dst.dn_next)) { 1205 - if ((flp->fld_dst == rt->fl.fld_dst) && 1206 - (flp->fld_src == rt->fl.fld_src) && 1207 - (flp->flowi_mark == rt->fl.flowi_mark) && 1204 + if ((flp->daddr == rt->fld.daddr) && 1205 + (flp->saddr == rt->fld.saddr) && 1206 + (flp->flowidn_mark == rt->fld.flowidn_mark) && 1208 1207 dn_is_output_route(rt) && 1209 - (rt->fl.flowi_oif == flp->flowi_oif)) { 1208 + (rt->fld.flowidn_oif == flp->flowidn_oif)) { 1210 1209 dst_use(&rt->dst, jiffies); 1211 1210 rcu_read_unlock_bh(); 1212 1211 *pprt = &rt->dst; ··· 1219 1218 return dn_route_output_slow(pprt, flp, flags); 1220 1219 } 1221 1220 1222 - static int dn_route_output_key(struct dst_entry **pprt, struct flowi *flp, int flags) 1221 + static int dn_route_output_key(struct dst_entry **pprt, struct flowidn *flp, int flags) 1223 1222 { 1224 1223 int err; 1225 1224 1226 1225 err = __dn_route_output_key(pprt, flp, flags); 1227 - if (err == 0 && flp->flowi_proto) { 1228 - *pprt = xfrm_lookup(&init_net, *pprt, flp, NULL, 0); 1226 + if (err == 0 && flp->flowidn_proto) { 1227 + *pprt = xfrm_lookup(&init_net, *pprt, 1228 + flowidn_to_flowi(flp), NULL, 0); 1229 1229 if (IS_ERR(*pprt)) { 1230 1230 err = PTR_ERR(*pprt); 1231 1231 *pprt = NULL; ··· 1235 1233 return err; 1236 1234 } 1237 1235 1238 - int dn_route_output_sock(struct dst_entry **pprt, struct flowi *fl, struct sock *sk, int flags) 1236 + int dn_route_output_sock(struct dst_entry **pprt, struct flowidn *fl, struct sock *sk, int flags) 1239 1237 { 1240 1238 int err; 1241 1239 1242 1240 err = __dn_route_output_key(pprt, fl, flags & MSG_TRYHARD); 1243 - if (err == 0 && fl->flowi_proto) { 1241 + if (err == 0 && fl->flowidn_proto) { 1244 1242 if (!(flags & MSG_DONTWAIT)) 1245 - fl->flowi_flags |= FLOWI_FLAG_CAN_SLEEP; 1246 - *pprt = xfrm_lookup(&init_net, *pprt, fl, sk, 0); 1243 + fl->flowidn_flags |= FLOWI_FLAG_CAN_SLEEP; 1244 + *pprt = xfrm_lookup(&init_net, *pprt, 1245 + flowidn_to_flowi(fl), sk, 0); 1247 1246 if (IS_ERR(*pprt)) { 1248 1247 err = PTR_ERR(*pprt); 1249 1248 *pprt = NULL; ··· 1265 1262 int flags = 0; 1266 1263 __le16 gateway = 0; 1267 1264 __le16 local_src = 0; 1268 - struct flowi fl = { 1269 - .fld_dst = cb->dst, 1270 - .fld_src = cb->src, 1271 - .fld_scope = RT_SCOPE_UNIVERSE, 1272 - .flowi_mark = skb->mark, 1273 - .flowi_iif = skb->dev->ifindex, 1265 + struct flowidn fld = { 1266 + .daddr = cb->dst, 1267 + .saddr = cb->src, 1268 + .flowidn_scope = RT_SCOPE_UNIVERSE, 1269 + .flowidn_mark = skb->mark, 1270 + .flowidn_iif = skb->dev->ifindex, 1274 1271 }; 1275 1272 struct dn_fib_res res = { .fi = NULL, .type = RTN_UNREACHABLE }; 1276 1273 int err = -EINVAL; ··· 1282 1279 goto out; 1283 1280 1284 1281 /* Zero source addresses are not allowed */ 1285 - if (fl.fld_src == 0) 1282 + if (fld.saddr == 0) 1286 1283 goto out; 1287 1284 1288 1285 /* ··· 1296 1293 if (dn_dev_islocal(in_dev, cb->src)) 1297 1294 goto out; 1298 1295 1299 - err = dn_fib_lookup(&fl, &res); 1296 + err = dn_fib_lookup(&fld, &res); 1300 1297 if (err) { 1301 1298 if (err != -ESRCH) 1302 1299 goto out; ··· 1308 1305 1309 1306 res.type = RTN_LOCAL; 1310 1307 } else { 1311 - __le16 src_map = fl.fld_src; 1308 + __le16 src_map = fld.saddr; 1312 1309 free_res = 1; 1313 1310 1314 1311 out_dev = DN_FIB_RES_DEV(res); ··· 1321 1318 dev_hold(out_dev); 1322 1319 1323 1320 if (res.r) 1324 - src_map = fl.fld_src; /* no NAT support for now */ 1321 + src_map = fld.saddr; /* no NAT support for now */ 1325 1322 1326 1323 gateway = DN_FIB_RES_GW(res); 1327 1324 if (res.type == RTN_NAT) { 1328 - fl.fld_dst = dn_fib_rules_map_destination(fl.fld_dst, &res); 1325 + fld.daddr = dn_fib_rules_map_destination(fld.daddr, &res); 1329 1326 dn_fib_res_put(&res); 1330 1327 free_res = 0; 1331 - if (dn_fib_lookup(&fl, &res)) 1328 + if (dn_fib_lookup(&fld, &res)) 1332 1329 goto e_inval; 1333 1330 free_res = 1; 1334 1331 if (res.type != RTN_UNICAST) 1335 1332 goto e_inval; 1336 1333 flags |= RTCF_DNAT; 1337 - gateway = fl.fld_dst; 1334 + gateway = fld.daddr; 1338 1335 } 1339 - fl.fld_src = src_map; 1336 + fld.saddr = src_map; 1340 1337 } 1341 1338 1342 1339 switch(res.type) { ··· 1350 1347 if (dn_db->parms.forwarding == 0) 1351 1348 goto e_inval; 1352 1349 1353 - if (res.fi->fib_nhs > 1 && fl.flowi_oif == 0) 1354 - dn_fib_select_multipath(&fl, &res); 1350 + if (res.fi->fib_nhs > 1 && fld.flowidn_oif == 0) 1351 + dn_fib_select_multipath(&fld, &res); 1355 1352 1356 1353 /* 1357 1354 * Check for out_dev == in_dev. We use the RTCF_DOREDIRECT ··· 1369 1366 break; 1370 1367 case RTN_LOCAL: 1371 1368 flags |= RTCF_LOCAL; 1372 - fl.fld_src = cb->dst; 1373 - fl.fld_dst = cb->src; 1369 + fld.saddr = cb->dst; 1370 + fld.daddr = cb->src; 1374 1371 1375 1372 /* Routing tables gave us a gateway */ 1376 1373 if (gateway) ··· 1403 1400 if (rt == NULL) 1404 1401 goto e_nobufs; 1405 1402 1406 - rt->rt_saddr = fl.fld_src; 1407 - rt->rt_daddr = fl.fld_dst; 1408 - rt->rt_gateway = fl.fld_dst; 1403 + rt->rt_saddr = fld.saddr; 1404 + rt->rt_daddr = fld.daddr; 1405 + rt->rt_gateway = fld.daddr; 1409 1406 if (gateway) 1410 1407 rt->rt_gateway = gateway; 1411 1408 rt->rt_local_src = local_src ? local_src : rt->rt_saddr; 1412 1409 1413 - rt->rt_dst_map = fl.fld_dst; 1414 - rt->rt_src_map = fl.fld_src; 1410 + rt->rt_dst_map = fld.daddr; 1411 + rt->rt_src_map = fld.saddr; 1415 1412 1416 - rt->fl.fld_src = cb->src; 1417 - rt->fl.fld_dst = cb->dst; 1418 - rt->fl.flowi_oif = 0; 1419 - rt->fl.flowi_iif = in_dev->ifindex; 1420 - rt->fl.flowi_mark = fl.flowi_mark; 1413 + rt->fld.saddr = cb->src; 1414 + rt->fld.daddr = cb->dst; 1415 + rt->fld.flowidn_oif = 0; 1416 + rt->fld.flowidn_iif = in_dev->ifindex; 1417 + rt->fld.flowidn_mark = fld.flowidn_mark; 1421 1418 1422 1419 rt->dst.flags = DST_HOST; 1423 1420 rt->dst.neighbour = neigh; ··· 1447 1444 if (err) 1448 1445 goto e_neighbour; 1449 1446 1450 - hash = dn_hash(rt->fl.fld_src, rt->fl.fld_dst); 1447 + hash = dn_hash(rt->fld.saddr, rt->fld.daddr); 1451 1448 dn_insert_route(rt, hash, &rt); 1452 1449 skb_dst_set(skb, &rt->dst); 1453 1450 ··· 1487 1484 rcu_read_lock(); 1488 1485 for(rt = rcu_dereference(dn_rt_hash_table[hash].chain); rt != NULL; 1489 1486 rt = rcu_dereference(rt->dst.dn_next)) { 1490 - if ((rt->fl.fld_src == cb->src) && 1491 - (rt->fl.fld_dst == cb->dst) && 1492 - (rt->fl.flowi_oif == 0) && 1493 - (rt->fl.flowi_mark == skb->mark) && 1494 - (rt->fl.flowi_iif == cb->iif)) { 1487 + if ((rt->fld.saddr == cb->src) && 1488 + (rt->fld.daddr == cb->dst) && 1489 + (rt->fld.flowidn_oif == 0) && 1490 + (rt->fld.flowidn_mark == skb->mark) && 1491 + (rt->fld.flowidn_iif == cb->iif)) { 1495 1492 dst_use(&rt->dst, jiffies); 1496 1493 rcu_read_unlock(); 1497 1494 skb_dst_set(skb, (struct dst_entry *)rt); ··· 1527 1524 if (rt->rt_flags & RTCF_NOTIFY) 1528 1525 r->rtm_flags |= RTM_F_NOTIFY; 1529 1526 RTA_PUT(skb, RTA_DST, 2, &rt->rt_daddr); 1530 - if (rt->fl.fld_src) { 1527 + if (rt->fld.saddr) { 1531 1528 r->rtm_src_len = 16; 1532 - RTA_PUT(skb, RTA_SRC, 2, &rt->fl.fld_src); 1529 + RTA_PUT(skb, RTA_SRC, 2, &rt->fld.saddr); 1533 1530 } 1534 1531 if (rt->dst.dev) 1535 1532 RTA_PUT(skb, RTA_OIF, sizeof(int), &rt->dst.dev->ifindex); ··· 1548 1545 rt->dst.error) < 0) 1549 1546 goto rtattr_failure; 1550 1547 if (dn_is_input_route(rt)) 1551 - RTA_PUT(skb, RTA_IIF, sizeof(int), &rt->fl.flowi_iif); 1548 + RTA_PUT(skb, RTA_IIF, sizeof(int), &rt->fld.flowidn_iif); 1552 1549 1553 1550 nlh->nlmsg_len = skb_tail_pointer(skb) - b; 1554 1551 return skb->len; ··· 1571 1568 struct dn_skb_cb *cb; 1572 1569 int err; 1573 1570 struct sk_buff *skb; 1574 - struct flowi fl; 1571 + struct flowidn fld; 1575 1572 1576 1573 if (!net_eq(net, &init_net)) 1577 1574 return -EINVAL; 1578 1575 1579 - memset(&fl, 0, sizeof(fl)); 1580 - fl.flowi_proto = DNPROTO_NSP; 1576 + memset(&fld, 0, sizeof(fld)); 1577 + fld.flowidn_proto = DNPROTO_NSP; 1581 1578 1582 1579 skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL); 1583 1580 if (skb == NULL) ··· 1586 1583 cb = DN_SKB_CB(skb); 1587 1584 1588 1585 if (rta[RTA_SRC-1]) 1589 - memcpy(&fl.fld_src, RTA_DATA(rta[RTA_SRC-1]), 2); 1586 + memcpy(&fld.saddr, RTA_DATA(rta[RTA_SRC-1]), 2); 1590 1587 if (rta[RTA_DST-1]) 1591 - memcpy(&fl.fld_dst, RTA_DATA(rta[RTA_DST-1]), 2); 1588 + memcpy(&fld.daddr, RTA_DATA(rta[RTA_DST-1]), 2); 1592 1589 if (rta[RTA_IIF-1]) 1593 - memcpy(&fl.flowi_iif, RTA_DATA(rta[RTA_IIF-1]), sizeof(int)); 1590 + memcpy(&fld.flowidn_iif, RTA_DATA(rta[RTA_IIF-1]), sizeof(int)); 1594 1591 1595 - if (fl.flowi_iif) { 1592 + if (fld.flowidn_iif) { 1596 1593 struct net_device *dev; 1597 - if ((dev = dev_get_by_index(&init_net, fl.flowi_iif)) == NULL) { 1594 + if ((dev = dev_get_by_index(&init_net, fld.flowidn_iif)) == NULL) { 1598 1595 kfree_skb(skb); 1599 1596 return -ENODEV; 1600 1597 } ··· 1605 1602 } 1606 1603 skb->protocol = htons(ETH_P_DNA_RT); 1607 1604 skb->dev = dev; 1608 - cb->src = fl.fld_src; 1609 - cb->dst = fl.fld_dst; 1605 + cb->src = fld.saddr; 1606 + cb->dst = fld.daddr; 1610 1607 local_bh_disable(); 1611 1608 err = dn_route_input(skb); 1612 1609 local_bh_enable(); ··· 1618 1615 int oif = 0; 1619 1616 if (rta[RTA_OIF - 1]) 1620 1617 memcpy(&oif, RTA_DATA(rta[RTA_OIF - 1]), sizeof(int)); 1621 - fl.flowi_oif = oif; 1622 - err = dn_route_output_key((struct dst_entry **)&rt, &fl, 0); 1618 + fld.flowidn_oif = oif; 1619 + err = dn_route_output_key((struct dst_entry **)&rt, &fld, 0); 1623 1620 } 1624 1621 1625 1622 if (skb->dev)
+10 -7
net/decnet/dn_rules.c
··· 49 49 }; 50 50 51 51 52 - int dn_fib_lookup(struct flowi *flp, struct dn_fib_res *res) 52 + int dn_fib_lookup(struct flowidn *flp, struct dn_fib_res *res) 53 53 { 54 54 struct fib_lookup_arg arg = { 55 55 .result = res, 56 56 }; 57 57 int err; 58 58 59 - err = fib_rules_lookup(dn_fib_rules_ops, flp, 0, &arg); 59 + err = fib_rules_lookup(dn_fib_rules_ops, 60 + flowidn_to_flowi(flp), 0, &arg); 60 61 res->r = arg.rule; 61 62 62 63 return err; ··· 66 65 static int dn_fib_rule_action(struct fib_rule *rule, struct flowi *flp, 67 66 int flags, struct fib_lookup_arg *arg) 68 67 { 68 + struct flowidn *fld = &flp->u.dn; 69 69 int err = -EAGAIN; 70 70 struct dn_fib_table *tbl; 71 71 ··· 92 90 if (tbl == NULL) 93 91 goto errout; 94 92 95 - err = tbl->lookup(tbl, flp, (struct dn_fib_res *)arg->result); 93 + err = tbl->lookup(tbl, fld, (struct dn_fib_res *)arg->result); 96 94 if (err > 0) 97 95 err = -EAGAIN; 98 96 errout: ··· 106 104 static int dn_fib_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) 107 105 { 108 106 struct dn_fib_rule *r = (struct dn_fib_rule *)rule; 109 - __le16 daddr = fl->fld_dst; 110 - __le16 saddr = fl->fld_src; 107 + struct flowidn *fld = &fl->u.dn; 108 + __le16 daddr = fld->daddr; 109 + __le16 saddr = fld->saddr; 111 110 112 111 if (((saddr ^ r->src) & r->srcmask) || 113 112 ((daddr ^ r->dst) & r->dstmask)) ··· 178 175 179 176 unsigned dnet_addr_type(__le16 addr) 180 177 { 181 - struct flowi fl = { .fld_dst = addr }; 178 + struct flowidn fld = { .daddr = addr }; 182 179 struct dn_fib_res res; 183 180 unsigned ret = RTN_UNICAST; 184 181 struct dn_fib_table *tb = dn_fib_get_table(RT_TABLE_LOCAL, 0); ··· 186 183 res.r = NULL; 187 184 188 185 if (tb) { 189 - if (!tb->lookup(tb, &fl, &res)) { 186 + if (!tb->lookup(tb, &fld, &res)) { 190 187 ret = res.type; 191 188 dn_fib_res_put(&res); 192 189 }
+3 -3
net/decnet/dn_table.c
··· 764 764 return found; 765 765 } 766 766 767 - static int dn_fib_table_lookup(struct dn_fib_table *tb, const struct flowi *flp, struct dn_fib_res *res) 767 + static int dn_fib_table_lookup(struct dn_fib_table *tb, const struct flowidn *flp, struct dn_fib_res *res) 768 768 { 769 769 int err; 770 770 struct dn_zone *dz; ··· 773 773 read_lock(&dn_fib_tables_lock); 774 774 for(dz = t->dh_zone_list; dz; dz = dz->dz_next) { 775 775 struct dn_fib_node *f; 776 - dn_fib_key_t k = dz_key(flp->fld_dst, dz); 776 + dn_fib_key_t k = dz_key(flp->daddr, dz); 777 777 778 778 for(f = dz_chain(k, dz); f; f = f->fn_next) { 779 779 if (!dn_key_eq(k, f->fn_key)) { ··· 788 788 if (f->fn_state&DN_S_ZOMBIE) 789 789 continue; 790 790 791 - if (f->fn_scope < flp->fld_scope) 791 + if (f->fn_scope < flp->flowidn_scope) 792 792 continue; 793 793 794 794 err = dn_fib_semantic_match(f->fn_type, DN_FIB_INFO(f), flp, res);