''' CLI provides a simple syntax to manipulate NDB. The syntax is the same for the console and the http versions. The first level of the hierarchy represents NDB views: * interfaces -- network interfaces * addresses -- IP addresses * routes -- IP and MPLS routes, one record per NH * neighbours -- ARP cache * rules -- RPDB rules * netns -- network namespaces * vlans -- bridge VLAN filters CLI supports indentation, though it is optional. A level up in the indentation means a level up in the object hierarchy. Same effect with `..` command. An example script to create a bridge and a port, no indentation:: ; comments start with ; interfaces create ifname br0, kind bridge address 00:11:22:33:44:55 state up add_ip 192.168.123.21/24 add_ip 192.168.123.22/24 commit .. ; level up to the interfaces view create ifname br0p0, kind dummy state up master br0 commit Same script with indentation, no `..` needed:: interfaces create ifname br0, kind bridge address 00:11:22:33:44:55 state up add_ip 192.168.123.21/24 add_ip 192.168.123.22/24 commit create ifname br0p0, kind dummy state up master br0 commit Select objects:: ; by name interfaces br0 ; ... ; by spec interfaces {target netns01, ifname eth0} ; ... {address 00:11:22:33:44:55} ; ... Manage interfaces ----------------- Create:: interfaces create ifname br0.100, kind vlan, vlan_id 100, link br0 commit create ifname v0, kind veth, peer v0p commit Change mac address:: interfaces br0 address 00:11:22:33:44:55 commit Change netns and rename:: sources add netns test01 interfaces v0p net_ns_fd test01 commit {target test01, ifname v0p} ifname eth0 commit summary | filter kind veth | select target, ifname | format json Manage addresses ---------------- ... Manage routes ------------- ... Generate reports ---------------- It is possible to modify the output of the dump or summary commands:: interfaces ; print index, ifname and MAC address for UP interfaces dump | filter state up | select index, ifname, address routes ; output in JSON format summary | format json The `format` command can only be the last in the sentence. Available output filters: filter { } -- filter out records select { } -- output only selected record fields format { } -- change the output format, possible values: csv, json Wait for events --------------- ... ''' t_stmt = 1 t_dict = 2 t_comma = 3 t_pipe = 4 t_end_of_dict = 7 t_end_of_sentence = 8 t_end_of_stream = 9 def change_pointer(f): f.__cli_cptr__ = True return f def show_result(f): f.__cli_publish__ = True return f