@@ -736,6 +736,72 @@ def _change_hostname(hostname):
736
736
run_command ('sed -i "/\s{}$/d" /etc/hosts' .format (current_hostname ), display_cmd = True )
737
737
run_command ('echo "127.0.0.1 {}" >> /etc/hosts' .format (hostname ), display_cmd = True )
738
738
739
+ def storm_control_interface_validate (port_name ):
740
+ if get_interface_naming_mode () == "alias" :
741
+ port_name = interface_alias_to_name (port_name )
742
+ if port_name is None :
743
+ click .echo ("'port_name' is None!" )
744
+ return False
745
+
746
+ if (port_name .startswith ("Ethernet" )):
747
+ if interface_name_is_valid (port_name ) is False :
748
+ click .echo ("Interface name %s is invalid. Please enter a valid interface name" % (port_name ))
749
+ return False
750
+ else :
751
+ click .echo ("Storm-control is supported only on Ethernet interfaces. Not supported on %s" % (port_name ))
752
+ return False
753
+
754
+ return True
755
+
756
+ def storm_control_bps_validate (bps ):
757
+ # if bps not in range(0,100000000001):
758
+ # click.echo("bps value must be in range 0-100000000000")
759
+ # return False
760
+ return True
761
+
762
+ def storm_control_set_entry (port_name , kbps , storm_type ):
763
+
764
+ if storm_control_interface_validate (port_name ) is False :
765
+ return False
766
+
767
+ if storm_control_bps_validate (kbps ) is False :
768
+ return False
769
+
770
+ config_db = ConfigDBConnector ()
771
+ config_db .connect ()
772
+ key = port_name + '|' + storm_type
773
+ entry = config_db .get_entry ('PORT_STORM_CONTROL' ,key )
774
+
775
+ if len (entry ) == 0 :
776
+ config_db .set_entry ('PORT_STORM_CONTROL' , key , {'kbps' :kbps })
777
+ else :
778
+ kbps_value = int (entry .get ('kbps' ,0 ))
779
+ click .echo ("Existing value of bps %d" % (kbps_value ))
780
+ if kbps_value != kbps :
781
+ config_db .mod_entry ('PORT_STORM_CONTROL' ,key ,{'kbps' :kbps })
782
+
783
+ return True
784
+
785
+ def storm_control_delete_entry (port_name , storm_type ):
786
+
787
+ if storm_control_interface_validate (port_name ) is False :
788
+ return False
789
+
790
+ config_db = ConfigDBConnector ()
791
+ config_db .connect ()
792
+ key = port_name + '|' + storm_type
793
+ entry = config_db .get_entry ('PORT_STORM_CONTROL' ,key )
794
+
795
+ if len (entry ) == 0 :
796
+ click .echo ("%s storm-control not enabled on interface %s" % (storm_type , port_name ))
797
+ return False
798
+ else :
799
+ config_db .set_entry ('PORT_STORM_CONTROL' ,key ,None )
800
+ click .echo ("deleted %s storm-control from interface %s" % (storm_type , port_name ))
801
+
802
+ return True
803
+
804
+
739
805
def _clear_qos ():
740
806
QOS_TABLE_NAMES = [
741
807
'TC_TO_PRIORITY_GROUP_MAP' ,
@@ -3690,6 +3756,90 @@ def enable(enable):
3690
3756
command = "ztp enable"
3691
3757
run_command (command , display_cmd = True )
3692
3758
3759
+ @interface .group ('storm-control' )
3760
+ @click .pass_context
3761
+ def storm_control (ctx ):
3762
+ """ Configure storm-control"""
3763
+ pass
3764
+
3765
+ @storm_control .group ('broadcast' )
3766
+ def broadcast ():
3767
+ """ Configure broadcast storm-control"""
3768
+ pass
3769
+
3770
+ @broadcast .command ('add' )
3771
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3772
+ @click .argument ('kbps' ,metavar = '<kbps_value>' , required = True , type = click .IntRange (0 ,100000000 ))
3773
+ @click .pass_context
3774
+ def add_broadcast_storm (ctx ,port_name ,kbps ):
3775
+ print "add broadcast storm-control"
3776
+
3777
+ if storm_control_set_entry (port_name , kbps , 'broadcast' ) is False :
3778
+ ctx .fail ("Unable to add broadcast storm-control" )
3779
+
3780
+ @broadcast .command ('del' )
3781
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3782
+ #@click.argument('bps',metavar='<bps_value>', required=True, type=int)
3783
+ @click .pass_context
3784
+ #def del_broadcast_storm(ctx,port_name,bps):
3785
+ def del_broadcast_storm (ctx ,port_name ):
3786
+ print "del broadcast storm-control"
3787
+
3788
+ if storm_control_delete_entry (port_name , 'broadcast' ) is False :
3789
+ ctx .fail ("Unable to delete broadcast storm-control" )
3790
+
3791
+ @storm_control .group ('unknown-unicast' )
3792
+ def unknown_unicast ():
3793
+ """ Configure unknown-unicast storm-control"""
3794
+ pass
3795
+
3796
+ @unknown_unicast .command ('add' )
3797
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3798
+ @click .argument ('kbps' ,metavar = '<kbps_value>' , required = True , type = click .IntRange (0 ,100000000 ))
3799
+ @click .pass_context
3800
+ def add_unknown_unicast_storm (ctx ,port_name ,kbps ):
3801
+ print "add unknown-unicast storm-control"
3802
+
3803
+ if storm_control_set_entry (port_name , kbps , 'unknown-unicast' ) is False :
3804
+ ctx .fail ("Unable to add unknown-unicast storm-control" )
3805
+
3806
+ @unknown_unicast .command ('del' )
3807
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3808
+ #@click.argument('bps',metavar='<bps_value>', required=True, type=int)
3809
+ @click .pass_context
3810
+ #def del_unknown_unicast_storm(ctx,port_name,bps):
3811
+ def del_unknown_unicast_storm (ctx ,port_name ):
3812
+ print "del unknown-unicast storm-control"
3813
+
3814
+ if storm_control_delete_entry (port_name , 'unknown-unicast' ) is False :
3815
+ ctx .fail ("Unable to delete unknown-unicast storm-control" )
3816
+
3817
+ @storm_control .group ('unknown-multicast' )
3818
+ def unknown_multicast ():
3819
+ """ Configure unknown-multicast storm-control"""
3820
+ pass
3821
+
3822
+ @unknown_multicast .command ('add' )
3823
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3824
+ @click .argument ('kbps' ,metavar = '<kbps_value>' , required = True , type = click .IntRange (0 ,100000000 ))
3825
+ @click .pass_context
3826
+ def add_unknown_multicast_storm (ctx ,port_name ,kbps ):
3827
+ print "add unknown-multicast storm-control"
3828
+
3829
+ if storm_control_set_entry (port_name , kbps , 'unknown-multicast' ) is False :
3830
+ ctx .fail ("Unable to add unknown-multicast storm-control" )
3831
+
3832
+ @unknown_multicast .command ('del' )
3833
+ @click .argument ('port_name' ,metavar = '<port_name>' , required = True )
3834
+ #@click.argument('bps',metavar='<bps_value>', required=True, type=int)
3835
+ @click .pass_context
3836
+ #def del_unknown_multicast_storm(ctx,port_name,bps):
3837
+ def del_unknown_multicast_storm (ctx ,port_name ):
3838
+ print "del unknown-multicast storm-control"
3839
+
3840
+ if storm_control_delete_entry (port_name , 'unknown-multicast' ) is False :
3841
+ ctx .fail ("Unable to delete unknown-multicast storm-control" )
3842
+
3693
3843
#
3694
3844
# 'syslog' group ('config syslog ...')
3695
3845
#
0 commit comments