@@ -820,35 +820,37 @@ def _add_faucet_fib_to_vip(self, vlan, priority, faucet_vip, faucet_vip_host):
820
820
821
821
def _nd_solicit_handler (self , now , pkt_meta , _ipv6_pkt , icmpv6_pkt , src_ip , _dst_ip ):
822
822
ofmsgs = []
823
- solicited_ip = ipaddress .ip_address (btos (icmpv6_pkt .data .dst ))
824
- vlan = pkt_meta .vlan
825
- if vlan .is_faucet_vip (solicited_ip ):
826
- if self ._stateful_gw (vlan , src_ip ):
827
- ofmsgs .extend (
828
- self ._add_host_fib_route (vlan , src_ip , blackhole = False ))
829
- ofmsgs .extend (self ._update_nexthop (
830
- now , vlan , pkt_meta .port , pkt_meta .eth_src , src_ip ))
831
- ofmsgs .append (
832
- vlan .pkt_out_port (
833
- valve_packet .nd_advert , pkt_meta .port ,
834
- vlan .faucet_mac , pkt_meta .eth_src ,
835
- solicited_ip , src_ip ))
836
- self .logger .info (
837
- 'Responded to ND solicit for %s from %s' % (
838
- solicited_ip , pkt_meta .log ()))
823
+ if isinstance (icmpv6_pkt .data , icmpv6 .nd_neighbor ):
824
+ solicited_ip = ipaddress .ip_address (btos (icmpv6_pkt .data .dst ))
825
+ vlan = pkt_meta .vlan
826
+ if vlan .is_faucet_vip (solicited_ip ):
827
+ if self ._stateful_gw (vlan , src_ip ):
828
+ ofmsgs .extend (
829
+ self ._add_host_fib_route (vlan , src_ip , blackhole = False ))
830
+ ofmsgs .extend (self ._update_nexthop (
831
+ now , vlan , pkt_meta .port , pkt_meta .eth_src , src_ip ))
832
+ ofmsgs .append (
833
+ vlan .pkt_out_port (
834
+ valve_packet .nd_advert , pkt_meta .port ,
835
+ vlan .faucet_mac , pkt_meta .eth_src ,
836
+ solicited_ip , src_ip ))
837
+ self .logger .info (
838
+ 'Responded to ND solicit for %s from %s' % (
839
+ solicited_ip , pkt_meta .log ()))
839
840
return ofmsgs
840
841
841
842
def _nd_advert_handler (self , now , pkt_meta , _ipv6_pkt , icmpv6_pkt , _src_ip , _dst_ip ):
842
843
ofmsgs = []
843
- target_ip = ipaddress .ip_address (btos (icmpv6_pkt .data .dst ))
844
- vlan = pkt_meta .vlan
845
- if vlan .ip_in_vip_subnet (target_ip ):
846
- if self ._stateful_gw (vlan , target_ip ):
847
- ofmsgs .extend (self ._update_nexthop (
848
- now , vlan , pkt_meta .port , pkt_meta .eth_src , target_ip ))
849
- self .logger .info (
850
- 'Received ND advert for %s from %s' % (
851
- target_ip , pkt_meta .log ()))
844
+ if isinstance (icmpv6_pkt .data , icmpv6 .nd_neighbor ):
845
+ target_ip = ipaddress .ip_address (btos (icmpv6_pkt .data .dst ))
846
+ vlan = pkt_meta .vlan
847
+ if vlan .ip_in_vip_subnet (target_ip ):
848
+ if self ._stateful_gw (vlan , target_ip ):
849
+ ofmsgs .extend (self ._update_nexthop (
850
+ now , vlan , pkt_meta .port , pkt_meta .eth_src , target_ip ))
851
+ self .logger .info (
852
+ 'Received ND advert for %s from %s' % (
853
+ target_ip , pkt_meta .log ()))
852
854
return ofmsgs
853
855
854
856
def _router_solicit_handler (self , _now , pkt_meta , _ipv6_pkt , _icmpv6_pkt , src_ip , _dst_ip ):
@@ -872,7 +874,8 @@ def _echo_request_handler(self, _now, pkt_meta, ipv6_pkt, icmpv6_pkt, src_ip, ds
872
874
ofmsgs = []
873
875
vlan = pkt_meta .vlan
874
876
if (vlan .from_connected_to_vip (src_ip , dst_ip ) and
875
- pkt_meta .eth_dst == vlan .faucet_mac ):
877
+ pkt_meta .eth_dst == vlan .faucet_mac and
878
+ isinstance (icmpv6_pkt .data , icmpv6 .echo )):
876
879
ofmsgs .append (
877
880
vlan .pkt_out_port (
878
881
valve_packet .icmpv6_echo_reply , pkt_meta .port ,
0 commit comments