Changeset 32628


Ignore:
Timestamp:
Jul 9, 2017, 2:31:36 PM (11 days ago)
Author:
brainslayer
Message:

allow to load fastnat without ipv6 module beeing loaded, also remove duplicated code

Location:
src/linux/universal
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.10/include/net/ip6_route.h

    r24165 r32628  
    103103                                                    struct in6_addr *saddr);
    104104
    105 extern struct rt6_info          *rt6_lookup(struct net *net,
     105extern __weak struct rt6_info   *rt6_lookup(struct net *net,
    106106                                            const struct in6_addr *daddr,
    107107                                            const struct in6_addr *saddr,
  • src/linux/universal/linux-3.10/net/fast-classifier/fast-classifier.c

    r32626 r32628  
    291291
    292292/*
    293  * fast_classifier_find_dev_and_mac_addr()
     293 * fast_classifier_
     294 find_dev_and_mac_addr()
    294295 *      Find the device and MAC address for a given IPv4 address.
    295296 *
     
    300301 * works if the neighbours are routers too.
    301302 */
    302 static bool fast_classifier_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, bool is_v4)
    303 {
    304         struct neighbour *neigh;
    305         struct rtable *rt;
    306         struct rt6_info *rt6;
    307         struct dst_entry *dst;
    308         struct net_device *mac_dev;
    309 
    310         /*
    311          * Look up the rtable entry for the IP address then get the hardware
    312          * address from its neighbour structure.  This means this works when the
    313          * neighbours are routers too.
    314          */
    315         if (is_v4) {
    316                 rt = ip_route_output(&init_net, addr->ip, 0, 0, 0);
    317                 if (unlikely(IS_ERR(rt))) {
    318                         goto ret_fail;
    319                 }
    320 
    321                 dst = (struct dst_entry *)rt;
    322         } else {
    323                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    324                 if (!rt6) {
    325                         goto ret_fail;
    326                 }
    327 
    328                 dst = (struct dst_entry *)rt6;
    329         }
    330 
    331         rcu_read_lock();
    332         neigh = dst_neigh_lookup(dst, addr);
    333         if (unlikely(!neigh)) {
    334                 rcu_read_unlock();
    335                 dst_release(dst);
    336                 goto ret_fail;
    337         }
    338 
    339         if (unlikely(!(neigh->nud_state & NUD_VALID))) {
    340                 rcu_read_unlock();
    341                 neigh_release(neigh);
    342                 dst_release(dst);
    343                 goto ret_fail;
    344         }
    345 
    346         mac_dev = neigh->dev;
    347         if (!mac_dev) {
    348                 rcu_read_unlock();
    349                 neigh_release(neigh);
    350                 dst_release(dst);
    351                 goto ret_fail;
    352         }
    353 
    354         memcpy(mac_addr, neigh->ha, (size_t)mac_dev->addr_len);
    355 
    356         dev_hold(mac_dev);
    357         *dev = mac_dev;
    358         rcu_read_unlock();
    359         neigh_release(neigh);
    360         dst_release(dst);
    361 
    362         return true;
    363 
    364 ret_fail:
    365         DEBUG_TRACE("failed to find MAC address for IP: %pIS\n", addr);
    366 
    367         return false;
    368 }
     303
     304extern bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4);
     305
    369306
    370307static DEFINE_SPINLOCK(sfe_connections_lock);
     
    992929         * destination host addresses.
    993930         */
    994         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
     931        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
    995932                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_DEV);
    996933                return NF_ACCEPT;
    997934        }
    998935
    999         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
     936        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
    1000937                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_XLATE_DEV);
    1001938                goto done1;
     
    1004941        dev_put(dev);
    1005942
    1006         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
     943        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
    1007944                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_DEV);
    1008945                goto done1;
     
    1011948        dev_put(dev);
    1012949
    1013         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
     950        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
    1014951                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_XLATE_DEV);
    1015952                goto done1;
  • src/linux/universal/linux-3.10/net/shortcut-fe/sfe_cm.c

    r32625 r32628  
    200200 * works if the neighbours are routers too.
    201201 */
    202 static bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
     202bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
    203203{
    204204        struct neighbour *neigh;
    205205        struct rtable *rt;
    206         struct rt6_info *rt6;
     206        struct rt6_info *rt6 = NULL;
    207207        struct dst_entry *dst;
    208208        struct net_device *mac_dev;
     
    221221                dst = (struct dst_entry *)rt;
    222222        } else {
    223                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
     223                if (rt6_lookup)
     224                    rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    224225                if (!rt6) {
    225226                        goto ret_fail;
     
    273274}
    274275
     276EXPORT_SYMBOL(sfe_cm_find_dev_and_mac_addr);
    275277/*
    276278 * sfe_cm_post_routing()
  • src/linux/universal/linux-3.18/include/net/ip6_route.h

    r32025 r32628  
    8484                        struct in6_addr *saddr);
    8585
    86 struct rt6_info *rt6_lookup(struct net *net, const struct in6_addr *daddr,
     86struct rt6_info __weak *rt6_lookup(struct net *net, const struct in6_addr *daddr,
    8787                            const struct in6_addr *saddr, int oif, int flags);
    8888
  • src/linux/universal/linux-3.18/net/fast-classifier/fast-classifier.c

    r32626 r32628  
    291291
    292292/*
    293  * fast_classifier_find_dev_and_mac_addr()
     293 * fast_classifier_
     294 find_dev_and_mac_addr()
    294295 *      Find the device and MAC address for a given IPv4 address.
    295296 *
     
    300301 * works if the neighbours are routers too.
    301302 */
    302 static bool fast_classifier_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, bool is_v4)
    303 {
    304         struct neighbour *neigh;
    305         struct rtable *rt;
    306         struct rt6_info *rt6;
    307         struct dst_entry *dst;
    308         struct net_device *mac_dev;
    309 
    310         /*
    311          * Look up the rtable entry for the IP address then get the hardware
    312          * address from its neighbour structure.  This means this works when the
    313          * neighbours are routers too.
    314          */
    315         if (is_v4) {
    316                 rt = ip_route_output(&init_net, addr->ip, 0, 0, 0);
    317                 if (unlikely(IS_ERR(rt))) {
    318                         goto ret_fail;
    319                 }
    320 
    321                 dst = (struct dst_entry *)rt;
    322         } else {
    323                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    324                 if (!rt6) {
    325                         goto ret_fail;
    326                 }
    327 
    328                 dst = (struct dst_entry *)rt6;
    329         }
    330 
    331         rcu_read_lock();
    332         neigh = dst_neigh_lookup(dst, addr);
    333         if (unlikely(!neigh)) {
    334                 rcu_read_unlock();
    335                 dst_release(dst);
    336                 goto ret_fail;
    337         }
    338 
    339         if (unlikely(!(neigh->nud_state & NUD_VALID))) {
    340                 rcu_read_unlock();
    341                 neigh_release(neigh);
    342                 dst_release(dst);
    343                 goto ret_fail;
    344         }
    345 
    346         mac_dev = neigh->dev;
    347         if (!mac_dev) {
    348                 rcu_read_unlock();
    349                 neigh_release(neigh);
    350                 dst_release(dst);
    351                 goto ret_fail;
    352         }
    353 
    354         memcpy(mac_addr, neigh->ha, (size_t)mac_dev->addr_len);
    355 
    356         dev_hold(mac_dev);
    357         *dev = mac_dev;
    358         rcu_read_unlock();
    359         neigh_release(neigh);
    360         dst_release(dst);
    361 
    362         return true;
    363 
    364 ret_fail:
    365         DEBUG_TRACE("failed to find MAC address for IP: %pIS\n", addr);
    366 
    367         return false;
    368 }
     303
     304extern bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4);
     305
    369306
    370307static DEFINE_SPINLOCK(sfe_connections_lock);
     
    992929         * destination host addresses.
    993930         */
    994         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
     931        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
    995932                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_DEV);
    996933                return NF_ACCEPT;
    997934        }
    998935
    999         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
     936        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
    1000937                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_XLATE_DEV);
    1001938                goto done1;
     
    1004941        dev_put(dev);
    1005942
    1006         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
     943        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
    1007944                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_DEV);
    1008945                goto done1;
     
    1011948        dev_put(dev);
    1012949
    1013         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
     950        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
    1014951                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_XLATE_DEV);
    1015952                goto done1;
  • src/linux/universal/linux-3.18/net/shortcut-fe/sfe_cm.c

    r32625 r32628  
    200200 * works if the neighbours are routers too.
    201201 */
    202 static bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
     202bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
    203203{
    204204        struct neighbour *neigh;
    205205        struct rtable *rt;
    206         struct rt6_info *rt6;
     206        struct rt6_info *rt6 = NULL;
    207207        struct dst_entry *dst;
    208208        struct net_device *mac_dev;
     
    221221                dst = (struct dst_entry *)rt;
    222222        } else {
    223                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
     223                if (rt6_lookup)
     224                    rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    224225                if (!rt6) {
    225226                        goto ret_fail;
     
    273274}
    274275
     276EXPORT_SYMBOL(sfe_cm_find_dev_and_mac_addr);
    275277/*
    276278 * sfe_cm_post_routing()
  • src/linux/universal/linux-4.4/include/net/ip6_route.h

    r32025 r32628  
    9292                        struct in6_addr *saddr);
    9393
    94 struct rt6_info *rt6_lookup(struct net *net, const struct in6_addr *daddr,
     94struct rt6_info __weak *rt6_lookup(struct net *net, const struct in6_addr *daddr,
    9595                            const struct in6_addr *saddr, int oif, int flags);
    9696
  • src/linux/universal/linux-4.4/net/fast-classifier/fast-classifier.c

    r32626 r32628  
    291291
    292292/*
    293  * fast_classifier_find_dev_and_mac_addr()
     293 * fast_classifier_
     294 find_dev_and_mac_addr()
    294295 *      Find the device and MAC address for a given IPv4 address.
    295296 *
     
    300301 * works if the neighbours are routers too.
    301302 */
    302 static bool fast_classifier_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, bool is_v4)
    303 {
    304         struct neighbour *neigh;
    305         struct rtable *rt;
    306         struct rt6_info *rt6;
    307         struct dst_entry *dst;
    308         struct net_device *mac_dev;
    309 
    310         /*
    311          * Look up the rtable entry for the IP address then get the hardware
    312          * address from its neighbour structure.  This means this works when the
    313          * neighbours are routers too.
    314          */
    315         if (is_v4) {
    316                 rt = ip_route_output(&init_net, addr->ip, 0, 0, 0);
    317                 if (unlikely(IS_ERR(rt))) {
    318                         goto ret_fail;
    319                 }
    320 
    321                 dst = (struct dst_entry *)rt;
    322         } else {
    323                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    324                 if (!rt6) {
    325                         goto ret_fail;
    326                 }
    327 
    328                 dst = (struct dst_entry *)rt6;
    329         }
    330 
    331         rcu_read_lock();
    332         neigh = dst_neigh_lookup(dst, addr);
    333         if (unlikely(!neigh)) {
    334                 rcu_read_unlock();
    335                 dst_release(dst);
    336                 goto ret_fail;
    337         }
    338 
    339         if (unlikely(!(neigh->nud_state & NUD_VALID))) {
    340                 rcu_read_unlock();
    341                 neigh_release(neigh);
    342                 dst_release(dst);
    343                 goto ret_fail;
    344         }
    345 
    346         mac_dev = neigh->dev;
    347         if (!mac_dev) {
    348                 rcu_read_unlock();
    349                 neigh_release(neigh);
    350                 dst_release(dst);
    351                 goto ret_fail;
    352         }
    353 
    354         memcpy(mac_addr, neigh->ha, (size_t)mac_dev->addr_len);
    355 
    356         dev_hold(mac_dev);
    357         *dev = mac_dev;
    358         rcu_read_unlock();
    359         neigh_release(neigh);
    360         dst_release(dst);
    361 
    362         return true;
    363 
    364 ret_fail:
    365         DEBUG_TRACE("failed to find MAC address for IP: %pIS\n", addr);
    366 
    367         return false;
    368 }
     303
     304extern bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4);
     305
    369306
    370307static DEFINE_SPINLOCK(sfe_connections_lock);
     
    992929         * destination host addresses.
    993930         */
    994         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
     931        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
    995932                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_DEV);
    996933                return NF_ACCEPT;
    997934        }
    998935
    999         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
     936        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
    1000937                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_XLATE_DEV);
    1001938                goto done1;
     
    1004941        dev_put(dev);
    1005942
    1006         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
     943        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
    1007944                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_DEV);
    1008945                goto done1;
     
    1011948        dev_put(dev);
    1012949
    1013         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
     950        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
    1014951                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_XLATE_DEV);
    1015952                goto done1;
  • src/linux/universal/linux-4.4/net/shortcut-fe/sfe_cm.c

    r32625 r32628  
    200200 * works if the neighbours are routers too.
    201201 */
    202 static bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
     202bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
    203203{
    204204        struct neighbour *neigh;
    205205        struct rtable *rt;
    206         struct rt6_info *rt6;
     206        struct rt6_info *rt6 = NULL;
    207207        struct dst_entry *dst;
    208208        struct net_device *mac_dev;
     
    221221                dst = (struct dst_entry *)rt;
    222222        } else {
    223                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
     223                if (rt6_lookup)
     224                    rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    224225                if (!rt6) {
    225226                        goto ret_fail;
     
    273274}
    274275
     276EXPORT_SYMBOL(sfe_cm_find_dev_and_mac_addr);
    275277/*
    276278 * sfe_cm_post_routing()
  • src/linux/universal/linux-4.9/include/net/ip6_route.h

    r32025 r32628  
    113113}
    114114
    115 struct rt6_info *rt6_lookup(struct net *net, const struct in6_addr *daddr,
     115struct rt6_info __weak *rt6_lookup(struct net *net, const struct in6_addr *daddr,
    116116                            const struct in6_addr *saddr, int oif, int flags);
    117117
  • src/linux/universal/linux-4.9/net/fast-classifier/fast-classifier.c

    r32627 r32628  
    291291
    292292/*
    293  * fast_classifier_find_dev_and_mac_addr()
     293 * fast_classifier_
     294 find_dev_and_mac_addr()
    294295 *      Find the device and MAC address for a given IPv4 address.
    295296 *
     
    300301 * works if the neighbours are routers too.
    301302 */
    302 static bool fast_classifier_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, bool is_v4)
    303 {
    304         struct neighbour *neigh;
    305         struct rtable *rt;
    306         struct rt6_info *rt6;
    307         struct dst_entry *dst;
    308         struct net_device *mac_dev;
    309 
    310         /*
    311          * Look up the rtable entry for the IP address then get the hardware
    312          * address from its neighbour structure.  This means this works when the
    313          * neighbours are routers too.
    314          */
    315         if (is_v4) {
    316                 rt = ip_route_output(&init_net, addr->ip, 0, 0, 0);
    317                 if (unlikely(IS_ERR(rt))) {
    318                         goto ret_fail;
    319                 }
    320 
    321                 dst = (struct dst_entry *)rt;
    322         } else {
    323                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    324                 if (!rt6) {
    325                         goto ret_fail;
    326                 }
    327 
    328                 dst = (struct dst_entry *)rt6;
    329         }
    330 
    331         rcu_read_lock();
    332         neigh = dst_neigh_lookup(dst, addr);
    333         if (unlikely(!neigh)) {
    334                 rcu_read_unlock();
    335                 dst_release(dst);
    336                 goto ret_fail;
    337         }
    338 
    339         if (unlikely(!(neigh->nud_state & NUD_VALID))) {
    340                 rcu_read_unlock();
    341                 neigh_release(neigh);
    342                 dst_release(dst);
    343                 goto ret_fail;
    344         }
    345 
    346         mac_dev = neigh->dev;
    347         if (!mac_dev) {
    348                 rcu_read_unlock();
    349                 neigh_release(neigh);
    350                 dst_release(dst);
    351                 goto ret_fail;
    352         }
    353 
    354         memcpy(mac_addr, neigh->ha, (size_t)mac_dev->addr_len);
    355 
    356         dev_hold(mac_dev);
    357         *dev = mac_dev;
    358         rcu_read_unlock();
    359         neigh_release(neigh);
    360         dst_release(dst);
    361 
    362         return true;
    363 
    364 ret_fail:
    365         DEBUG_TRACE("failed to find MAC address for IP: %pIS\n", addr);
    366 
    367         return false;
    368 }
     303
     304extern bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4);
     305
    369306
    370307static DEFINE_SPINLOCK(sfe_connections_lock);
     
    992929         * destination host addresses.
    993930         */
    994         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
     931        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip, &src_dev, sic.src_mac, is_v4)) {
    995932                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_DEV);
    996933                return NF_ACCEPT;
    997934        }
    998935
    999         if (!fast_classifier_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
     936        if (!sfe_cm_find_dev_and_mac_addr(&sic.src_ip_xlate, &dev, sic.src_mac_xlate, is_v4)) {
    1000937                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_SRC_XLATE_DEV);
    1001938                goto done1;
     
    1004941        dev_put(dev);
    1005942
    1006         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
     943        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip, &dev, sic.dest_mac, is_v4)) {
    1007944                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_DEV);
    1008945                goto done1;
     
    1011948        dev_put(dev);
    1012949
    1013         if (!fast_classifier_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
     950        if (!sfe_cm_find_dev_and_mac_addr(&sic.dest_ip_xlate, &dest_dev, sic.dest_mac_xlate, is_v4)) {
    1014951                fast_classifier_incr_exceptions(FAST_CL_EXCEPTION_NO_DEST_XLATE_DEV);
    1015952                goto done1;
  • src/linux/universal/linux-4.9/net/shortcut-fe/sfe_cm.c

    r32627 r32628  
    200200 * works if the neighbours are routers too.
    201201 */
    202 static bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
     202bool sfe_cm_find_dev_and_mac_addr(sfe_ip_addr_t *addr, struct net_device **dev, u8 *mac_addr, int is_v4)
    203203{
    204204        struct neighbour *neigh;
    205205        struct rtable *rt;
    206         struct rt6_info *rt6;
     206        struct rt6_info *rt6 = NULL;
    207207        struct dst_entry *dst;
    208208        struct net_device *mac_dev;
     
    221221                dst = (struct dst_entry *)rt;
    222222        } else {
    223                 rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
     223                if (rt6_lookup)
     224                    rt6 = rt6_lookup(&init_net, (struct in6_addr *)addr->ip6, 0, 0, 0);
    224225                if (!rt6) {
    225226                        goto ret_fail;
     
    273274}
    274275
     276EXPORT_SYMBOL(sfe_cm_find_dev_and_mac_addr);
    275277/*
    276278 * sfe_cm_post_routing()
Note: See TracChangeset for help on using the changeset viewer.