mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 07:37:54 +00:00
zebra: add 'int idx_foo' argv index variables
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This commit is contained in:
parent
0a3e73dd27
commit
7c022376c8
@ -4,6 +4,7 @@ import re
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
from collections import OrderedDict
|
||||
from copy import deepcopy
|
||||
from pprint import pformat, pprint
|
||||
|
||||
@ -156,7 +157,7 @@ def get_argv_translator(line_number, line):
|
||||
return table
|
||||
'''
|
||||
|
||||
def get_argv_variable_indexes(line_number, line):
|
||||
def get_command_string_variable_indexes(line_number, line):
|
||||
indexes = {}
|
||||
|
||||
line = line.strip()
|
||||
@ -177,6 +178,230 @@ def get_argv_variable_indexes(line_number, line):
|
||||
return (max_index, indexes)
|
||||
|
||||
|
||||
def get_token_index_variable_name(line_number, token):
|
||||
|
||||
re_range = re.search('\(\d+-\d+\)', token)
|
||||
|
||||
if token.startswith('['):
|
||||
assert token.endswith(']'), "Token %s should end with ]" % token
|
||||
token = token[1:-1]
|
||||
|
||||
if token.startswith('<'):
|
||||
assert token.endswith('>'), "Token %s should end with >" % token
|
||||
token = token[1:-1]
|
||||
|
||||
if token == 'A.B.C.D':
|
||||
return 'idx_ipv4'
|
||||
|
||||
elif token == 'A.B.C.D/M':
|
||||
return 'idx_ipv4_prefixlen'
|
||||
|
||||
elif token == 'X:X::X:X':
|
||||
return 'idx_ipv6'
|
||||
|
||||
elif token == 'X:X::X:X/M':
|
||||
return 'idx_ipv6_prefixlen'
|
||||
|
||||
elif token == 'ASN:nn_or_IP-address:nn':
|
||||
return 'idx_ext_community'
|
||||
|
||||
elif token == '.AA:NN':
|
||||
return 'idx_community'
|
||||
|
||||
elif token == 'WORD':
|
||||
return 'idx_word'
|
||||
|
||||
elif token == 'json':
|
||||
return 'idx_json'
|
||||
|
||||
elif token == '.LINE':
|
||||
return 'idx_regex'
|
||||
|
||||
elif token == 'A.B.C.D|INTERFACE':
|
||||
return 'idx_ipv4_ifname'
|
||||
|
||||
elif token == 'A.B.C.D|INTERFACE|null0':
|
||||
return 'idx_ipv4_ifname_null'
|
||||
|
||||
elif token == 'X:X::X:X|INTERFACE':
|
||||
return 'idx_ipv6_ifname'
|
||||
|
||||
elif token == 'reject|blackhole':
|
||||
return 'idx_reject_blackhole'
|
||||
|
||||
elif token == 'route-map NAME':
|
||||
return 'idx_route_map'
|
||||
|
||||
elif token == 'recv|send|detail':
|
||||
return 'idx_recv_send'
|
||||
|
||||
elif token == 'recv|send':
|
||||
return 'idx_recv_send'
|
||||
|
||||
elif token == 'up|down':
|
||||
return 'idx_up_down'
|
||||
|
||||
elif token == 'off-link':
|
||||
return 'idx_off_link'
|
||||
|
||||
elif token == 'no-autoconfig':
|
||||
return 'idx_no_autoconfig'
|
||||
|
||||
elif token == 'router-address':
|
||||
return 'idx_router_address'
|
||||
|
||||
elif token == 'high|medium|low':
|
||||
return 'idx_high_medium_low'
|
||||
|
||||
elif token == '(0-4294967295)|infinite':
|
||||
return 'idx_number_infinite'
|
||||
|
||||
elif token == '(1-199)|(1300-2699)|WORD':
|
||||
return 'idx_acl'
|
||||
|
||||
elif token == 'A.B.C.D|X:X::X:X':
|
||||
return 'idx_ip'
|
||||
|
||||
elif token == 'urib-only|mrib-only|mrib-then-urib|lower-distance|longer-prefix':
|
||||
return 'idx_rpf_lookup_mode'
|
||||
|
||||
elif token in ('kernel|connected|static|rip|ospf|isis|pim|table',
|
||||
'kernel|connected|static|ripng|ospf6|isis|table',
|
||||
'kernel|connected|static|rip|isis|bgp|pim|table',
|
||||
'kernel|connected|static|rip|ospf|isis|bgp|pim|table',
|
||||
'kernel|connected|static|rip|ospf|isis|bgp|pim|table',
|
||||
'kernel|connected|static|rip|ospf|isis|bgp|pim|table|any',
|
||||
'kernel|connected|static|ripng|ospf6|isis|bgp|table|any',
|
||||
'kernel|connected|static|ripng|ospf6|isis|bgp|table',
|
||||
'kernel|connected|static|ospf6|isis|bgp|table',
|
||||
'kernel|connected|static|ospf|isis|bgp|pim|table',
|
||||
'kernel|connected|static|ripng|isis|bgp|table',
|
||||
# '',
|
||||
'bgp|ospf|rip|ripng|isis|ospf6|connected|system|kernel|static',
|
||||
'kernel|connected|static|rip|ripng|ospf|ospf6|bgp|pim|table'):
|
||||
return 'idx_protocol'
|
||||
|
||||
elif '|' in token:
|
||||
raise Exception("%d: what variable name for %s" % (line_number, token))
|
||||
|
||||
elif re_range:
|
||||
return 'idx_number'
|
||||
|
||||
elif token.upper() == token:
|
||||
return 'idx_%s' % token.lower()
|
||||
|
||||
else:
|
||||
raise Exception("%d: what variable name for %s" % (line_number, token))
|
||||
|
||||
|
||||
def get_command_string_index_variable_table(line_number, line):
|
||||
"""
|
||||
Return a table that maps an index position to a variable name such as 'idx_ipv4'
|
||||
"""
|
||||
indexes = OrderedDict()
|
||||
|
||||
line = line.strip()
|
||||
assert line.startswith('"'), "line does not start with \"\n%s" % (line)
|
||||
assert line.endswith('",'), "line does not end with \",\n%s" % (line)
|
||||
line = line[1:-2]
|
||||
max_index = 0
|
||||
|
||||
for (token_index, token) in enumerate(line_to_tokens(line_number, line)):
|
||||
if not token:
|
||||
raise Exception("%d: empty token" % line_number)
|
||||
|
||||
if token_is_variable(line_number, token):
|
||||
# print "%s is a token" % token
|
||||
idx_variable_name = get_token_index_variable_name(line_number, token)
|
||||
count = 0
|
||||
for tmp in indexes.itervalues():
|
||||
if tmp == idx_variable_name:
|
||||
count += 1
|
||||
elif re.search('^%s_\d+' % idx_variable_name, tmp):
|
||||
count += 1
|
||||
if count:
|
||||
idx_variable_name = "%s_%d" % (idx_variable_name, count + 1)
|
||||
indexes[token_index] = idx_variable_name
|
||||
|
||||
return indexes
|
||||
|
||||
def expand_command_string(line):
|
||||
|
||||
# in the middle
|
||||
line = line.replace('" CMD_AS_RANGE "', '(1-4294967295)')
|
||||
line = line.replace('" DYNAMIC_NEIGHBOR_LIMIT_RANGE "', '(1-5000)')
|
||||
line = line.replace('" BGP_INSTANCE_CMD "', '<view|vrf> WORD')
|
||||
line = line.replace('" BGP_INSTANCE_ALL_CMD "', '<view|vrf> all')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MULTIPATH_NUM) "', '(1-255)')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_BGPD "', '<kernel|connected|static|rip|ospf|isis|pim|table>')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_BGPD "', '<kernel|connected|static|ripng|ospf6|isis|table>')
|
||||
line = line.replace('" OSPF_LSA_TYPES_CMD_STR "', 'asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPFD "', '<kernel|connected|static|rip|isis|bgp|pim|table>')
|
||||
line = line.replace('" VRF_CMD_STR "', 'vrf NAME')
|
||||
line = line.replace('" VRF_ALL_CMD_STR "', 'vrf all')
|
||||
line = line.replace('" QUAGGA_IP_PROTOCOL_MAP_STR_ZEBRA "', '<kernel|connected|static|rip|ospf|isis|bgp|pim|table|any>')
|
||||
line = line.replace('" QUAGGA_IP6_PROTOCOL_MAP_STR_ZEBRA "', '<kernel|connected|static|ripng|ospf6|isis|bgp|table|any>')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPNGD "', '<kernel|connected|static|ospf6|isis|bgp|table>')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPD "', '<kernel|connected|static|ospf|isis|bgp|pim|table>')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPF6D "', '<kernel|connected|static|ripng|isis|bgp|table>')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_ISISD "', '<kernel|connected|static|rip|ripng|ospf|ospf6|bgp|pim|table>')
|
||||
line = line.replace('" LOG_FACILITIES "', '<kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7>')
|
||||
|
||||
# endswith
|
||||
line = line.replace('" CMD_AS_RANGE,', ' (1-4294967295)",')
|
||||
line = line.replace('" DYNAMIC_NEIGHBOR_LIMIT_RANGE,', ' (1-5000)",')
|
||||
line = line.replace('" BGP_INSTANCE_CMD,', ' <view|vrf> WORD",')
|
||||
line = line.replace('" BGP_INSTANCE_ALL_CMD,', ' <view|vrf> all",')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MULTIPATH_NUM),', '(1-255)",')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MAXTTL),', '(1-255)",')
|
||||
line = line.replace('" BFD_CMD_DETECT_MULT_RANGE BFD_CMD_MIN_RX_RANGE BFD_CMD_MIN_TX_RANGE,', '(2-255) (50-60000) (50-60000)",')
|
||||
line = line.replace('" OSPF_LSA_TYPES_CMD_STR,',
|
||||
' asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as",')
|
||||
line = line.replace('" BGP_UPDATE_SOURCE_REQ_STR,', ' <A.B.C.D|X:X::X:X|WORD>",')
|
||||
line = line.replace('" BGP_UPDATE_SOURCE_OPT_STR,', ' [A.B.C.D|X:X::X:X|WORD]",')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_BGPD,', ' <kernel|connected|static|rip|ospf|isis|pim|table>",')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_BGPD,', ' <kernel|connected|static|ripng|ospf6|isis|table>",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPFD,', ' <kernel|connected|static|rip|isis|bgp|pim|table>",')
|
||||
line = line.replace('" VRF_CMD_STR,', ' vrf NAME",')
|
||||
line = line.replace('" VRF_ALL_CMD_STR,', ' vrf all",')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_ZEBRA,', ' <kernel|connected|static|rip|ospf|isis|bgp|pim|table>",')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_ZEBRA,', ' <kernel|connected|static|ripng|ospf6|isis|bgp|table>",')
|
||||
line = line.replace('" QUAGGA_IP_PROTOCOL_MAP_STR_ZEBRA,', ' <kernel|connected|static|rip|ospf|isis|bgp|pim|table|any>",')
|
||||
line = line.replace('" QUAGGA_IP6_PROTOCOL_MAP_STR_ZEBRA,', ' <kernel|connected|static|ripng|ospf6|isis|bgp|table|any>",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPNGD,', ' <kernel|connected|static|ospf6|isis|bgp|table>",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPD,', ' <kernel|connected|static|ospf|isis|bgp|pim|table>",')
|
||||
line = line.replace('" PIM_CMD_IP_MULTICAST_ROUTING,', ' ip multicast-routing",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_INTERVAL,', ' ip igmp query-interval",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC,', ' ip igmp query-max-response-time-dsec",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME,', ' ip igmp query-max-response-time",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPF6D,', ' <kernel|connected|static|ripng|isis|bgp|table>",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_ISISD,', ' <kernel|connected|static|rip|ripng|ospf|ospf6|bgp|pim|table>",')
|
||||
line = line.replace('" LOG_FACILITIES,', ' <kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7>",')
|
||||
|
||||
# startswith
|
||||
line = line.replace('LISTEN_RANGE_CMD "', '"bgp listen range <A.B.C.D/M|X:X::X:X/M> ')
|
||||
line = line.replace('NO_NEIGHBOR_CMD2 "', '"no neighbor <A.B.C.D|X:X::X:X|WORD> ')
|
||||
line = line.replace('NEIGHBOR_CMD2 "', '"neighbor <A.B.C.D|X:X::X:X|WORD> ')
|
||||
line = line.replace('NO_NEIGHBOR_CMD "', '"no neighbor <A.B.C.D|X:X::X:X> ')
|
||||
line = line.replace('NEIGHBOR_CMD "', '"neighbor <A.B.C.D|X:X::X:X> ')
|
||||
line = line.replace('PIM_CMD_NO "', '"no ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_INTERVAL "', '"ip igmp query-interval ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME "', '"ip igmp query-max-response-time ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC "', '"ip igmp query-max-response-time-dsec ')
|
||||
|
||||
# solo
|
||||
line = line.replace('NO_NEIGHBOR_CMD2,', '"no neighbor <A.B.C.D|X:X::X:X|WORD>",')
|
||||
line = line.replace('NEIGHBOR_CMD2,', '"neighbor <A.B.C.D|X:X::X:X|WORD>",')
|
||||
line = line.replace('NO_NEIGHBOR_CMD,', '"no neighbor <A.B.C.D|X:X::X:X>",')
|
||||
line = line.replace('NEIGHBOR_CMD,', '"neighbor <A.B.C.D|X:X::X:X>",')
|
||||
line = line.replace('PIM_CMD_IP_MULTICAST_ROUTING,', '"ip multicast-routing",')
|
||||
|
||||
if line.rstrip().endswith('" ,'):
|
||||
line = line.replace('" ,', '",')
|
||||
|
||||
return line
|
||||
|
||||
|
||||
class DEFUN(object):
|
||||
|
||||
def __init__(self, line_number, command_string_expanded, lines):
|
||||
@ -216,14 +441,14 @@ DEFUN (no_bgp_maxmed_onstartup,
|
||||
|
||||
elif state == 'HELP':
|
||||
if line.strip() == '{':
|
||||
self.guts.append(line)
|
||||
# self.guts.append(line)
|
||||
state = 'BODY'
|
||||
else:
|
||||
self.help_strings.append(line)
|
||||
|
||||
elif state == 'BODY':
|
||||
if line.rstrip() == '}':
|
||||
self.guts.append(line)
|
||||
# self.guts.append(line)
|
||||
state = None
|
||||
else:
|
||||
self.guts.append(line)
|
||||
@ -239,7 +464,7 @@ DEFUN (no_bgp_maxmed_onstartup,
|
||||
return self.name
|
||||
|
||||
def sanity_check(self):
|
||||
(max_index, variable_indexes) = get_argv_variable_indexes(self.line_number, self.command_string_expanded)
|
||||
(max_index, variable_indexes) = get_command_string_variable_indexes(self.line_number, self.command_string_expanded)
|
||||
|
||||
# sanity check that each argv index matches a variable in the command string
|
||||
for line in self.guts:
|
||||
@ -256,7 +481,6 @@ DEFUN (no_bgp_maxmed_onstartup,
|
||||
|
||||
def get_new_command_string(self):
|
||||
line = self.command_string
|
||||
# dwalton
|
||||
# Change <1-255> to (1-255)
|
||||
# Change (foo|bar) to <foo|bar>
|
||||
# Change {wazzup} to [wazzup]....there shouldn't be many of these
|
||||
@ -284,18 +508,68 @@ DEFUN (no_bgp_maxmed_onstartup,
|
||||
line = re_space.group(1) + ' '.join(line.split()) + re_space.group(2)
|
||||
return line
|
||||
|
||||
def get_used_idx_variables(self, idx_table):
|
||||
used = {}
|
||||
|
||||
# sanity check that each argv index matches a variable in the command string
|
||||
for line in self.guts:
|
||||
if 'argv[' in line and '->arg' in line:
|
||||
tmp_line = deepcopy(line)
|
||||
re_argv = re.search('^.*?argv\[(\w+)\]->arg(.*)$', tmp_line)
|
||||
|
||||
while re_argv:
|
||||
index = re_argv.group(1)
|
||||
|
||||
if index.isdigit():
|
||||
index = int(index)
|
||||
if index in idx_table:
|
||||
used[index] = idx_table[index]
|
||||
else:
|
||||
print "%d: could not find idx variable for %d" % (self.line_number, index)
|
||||
else:
|
||||
for (key, value) in idx_table.iteritems():
|
||||
if value == index:
|
||||
used[key] = value
|
||||
break
|
||||
|
||||
tmp_line = re_argv.group(2)
|
||||
re_argv = re.search('^.*?argv\[(\w+)\]->arg(.*)$', tmp_line)
|
||||
|
||||
return used
|
||||
|
||||
def dump(self):
|
||||
new_command_string = self.get_new_command_string()
|
||||
new_command_string_expanded = expand_command_string(new_command_string)
|
||||
lines = []
|
||||
lines.append("DEFUN (%s,\n" % self.name)
|
||||
lines.append(" %s,\n" % self.name_cmd)
|
||||
lines.append(self.get_new_command_string())
|
||||
lines.append(new_command_string)
|
||||
lines.extend(self.help_strings)
|
||||
lines.extend(self.guts)
|
||||
lines.append('{\n')
|
||||
|
||||
# only print the variables that will be used else we get a compile error
|
||||
idx_table = get_command_string_index_variable_table(self.line_number, new_command_string_expanded)
|
||||
idx_table_used = self.get_used_idx_variables(idx_table)
|
||||
|
||||
for index in sorted(idx_table_used.keys()):
|
||||
idx_variable = idx_table_used[index]
|
||||
lines.append(" int %s = %d;\n" % (idx_variable, index))
|
||||
|
||||
# sanity check that each argv index matches a variable in the command string
|
||||
for line in self.guts:
|
||||
if line.startswith(' int idx_'):
|
||||
pass
|
||||
elif 'argv[' in line and '->arg' in line:
|
||||
for (index, idx_variable) in idx_table.iteritems():
|
||||
line = line.replace("argv[%d]->arg" % index, "argv[%s]->arg" % idx_variable)
|
||||
lines.append(line)
|
||||
else:
|
||||
lines.append(line)
|
||||
|
||||
lines.append('}\n')
|
||||
return ''.join(lines)
|
||||
|
||||
|
||||
|
||||
|
||||
def update_argvs(filename):
|
||||
lines = []
|
||||
|
||||
@ -334,78 +608,7 @@ def update_argvs(filename):
|
||||
state = 'DEFUN_BODY'
|
||||
|
||||
elif line_number == defun_line_number + 2:
|
||||
|
||||
# in the middle
|
||||
line = line.replace('" CMD_AS_RANGE "', '<1-4294967295>')
|
||||
line = line.replace('" DYNAMIC_NEIGHBOR_LIMIT_RANGE "', '<1-5000>')
|
||||
line = line.replace('" BGP_INSTANCE_CMD "', '(view|vrf) WORD')
|
||||
line = line.replace('" BGP_INSTANCE_ALL_CMD "', '(view|vrf) all')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MULTIPATH_NUM) "', '<1-255>')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_BGPD "', '(kernel|connected|static|rip|ospf|isis|pim|table)')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_BGPD "', '(kernel|connected|static|ripng|ospf6|isis|table)')
|
||||
line = line.replace('" OSPF_LSA_TYPES_CMD_STR "', 'asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPFD "', '(kernel|connected|static|rip|isis|bgp|pim|table)')
|
||||
line = line.replace('" VRF_CMD_STR "', 'vrf NAME')
|
||||
line = line.replace('" VRF_ALL_CMD_STR "', 'vrf all')
|
||||
line = line.replace('" QUAGGA_IP_PROTOCOL_MAP_STR_ZEBRA "', '(kernel|connected|static|rip|ospf|isis|bgp|pim|table|any)')
|
||||
line = line.replace('" QUAGGA_IP6_PROTOCOL_MAP_STR_ZEBRA "', '(kernel|connected|static|ripng|ospf6|isis|bgp|table|any)')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPNGD "', '(kernel|connected|static|ospf6|isis|bgp|table)')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPD "', '(kernel|connected|static|ospf|isis|bgp|pim|table)')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPF6D "', '(kernel|connected|static|ripng|isis|bgp|table)')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_ISISD "', '(kernel|connected|static|rip|ripng|ospf|ospf6|bgp|pim|table)')
|
||||
line = line.replace('" LOG_FACILITIES "', '(kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7)')
|
||||
|
||||
# endswith
|
||||
line = line.replace('" CMD_AS_RANGE,', ' <1-4294967295>",')
|
||||
line = line.replace('" DYNAMIC_NEIGHBOR_LIMIT_RANGE,', ' <1-5000>",')
|
||||
line = line.replace('" BGP_INSTANCE_CMD,', ' (view|vrf) WORD",')
|
||||
line = line.replace('" BGP_INSTANCE_ALL_CMD,', ' (view|vrf) all",')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MULTIPATH_NUM),', '<1-255>",')
|
||||
line = line.replace('" CMD_RANGE_STR(1, MAXTTL),', '<1-255>",')
|
||||
line = line.replace('" BFD_CMD_DETECT_MULT_RANGE BFD_CMD_MIN_RX_RANGE BFD_CMD_MIN_TX_RANGE,', '<2-255> <50-60000> <50-60000>",')
|
||||
line = line.replace('" OSPF_LSA_TYPES_CMD_STR,',
|
||||
' asbr-summary|external|network|router|summary|nssa-external|opaque-link|opaque-area|opaque-as",')
|
||||
line = line.replace('" BGP_UPDATE_SOURCE_REQ_STR,', ' (A.B.C.D|X:X::X:X|WORD)",')
|
||||
line = line.replace('" BGP_UPDATE_SOURCE_OPT_STR,', ' {A.B.C.D|X:X::X:X|WORD}",')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_BGPD,', ' (kernel|connected|static|rip|ospf|isis|pim|table)",')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_BGPD,', ' (kernel|connected|static|ripng|ospf6|isis|table)",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPFD,', ' (kernel|connected|static|rip|isis|bgp|pim|table)",')
|
||||
line = line.replace('" VRF_CMD_STR,', ' vrf NAME",')
|
||||
line = line.replace('" VRF_ALL_CMD_STR,', ' vrf all",')
|
||||
line = line.replace('" QUAGGA_IP_REDIST_STR_ZEBRA,', ' (kernel|connected|static|rip|ospf|isis|bgp|pim|table)",')
|
||||
line = line.replace('" QUAGGA_IP6_REDIST_STR_ZEBRA,', ' (kernel|connected|static|ripng|ospf6|isis|bgp|table)",')
|
||||
line = line.replace('" QUAGGA_IP_PROTOCOL_MAP_STR_ZEBRA,', ' (kernel|connected|static|rip|ospf|isis|bgp|pim|table|any)",')
|
||||
line = line.replace('" QUAGGA_IP6_PROTOCOL_MAP_STR_ZEBRA,', ' (kernel|connected|static|ripng|ospf6|isis|bgp|table|any)",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPNGD,', ' (kernel|connected|static|ospf6|isis|bgp|table)",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_RIPD,', ' (kernel|connected|static|ospf|isis|bgp|pim|table)",')
|
||||
line = line.replace('" PIM_CMD_IP_MULTICAST_ROUTING,', ' ip multicast-routing",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_INTERVAL,', ' ip igmp query-interval",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC,', ' ip igmp query-max-response-time-dsec",')
|
||||
line = line.replace('" PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME,', ' ip igmp query-max-response-time",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_OSPF6D,', ' (kernel|connected|static|ripng|isis|bgp|table)",')
|
||||
line = line.replace('" QUAGGA_REDIST_STR_ISISD,', ' (kernel|connected|static|rip|ripng|ospf|ospf6|bgp|pim|table)",')
|
||||
line = line.replace('" LOG_FACILITIES,', ' (kern|user|mail|daemon|auth|syslog|lpr|news|uucp|cron|local0|local1|local2|local3|local4|local5|local6|local7)",')
|
||||
|
||||
# startswith
|
||||
line = line.replace('LISTEN_RANGE_CMD "', '"bgp listen range (A.B.C.D/M|X:X::X:X/M) ')
|
||||
line = line.replace('NO_NEIGHBOR_CMD2 "', '"no neighbor (A.B.C.D|X:X::X:X|WORD) ')
|
||||
line = line.replace('NEIGHBOR_CMD2 "', '"neighbor (A.B.C.D|X:X::X:X|WORD) ')
|
||||
line = line.replace('NO_NEIGHBOR_CMD "', '"no neighbor (A.B.C.D|X:X::X:X) ')
|
||||
line = line.replace('NEIGHBOR_CMD "', '"neighbor (A.B.C.D|X:X::X:X) ')
|
||||
line = line.replace('PIM_CMD_NO "', '"no ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_INTERVAL "', '"ip igmp query-interval ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME "', '"ip igmp query-max-response-time ')
|
||||
line = line.replace('PIM_CMD_IP_IGMP_QUERY_MAX_RESPONSE_TIME_DSEC "', '"ip igmp query-max-response-time-dsec ')
|
||||
|
||||
# solo
|
||||
line = line.replace('NO_NEIGHBOR_CMD2,', '"no neighbor (A.B.C.D|X:X::X:X|WORD)",')
|
||||
line = line.replace('NEIGHBOR_CMD2,', '"neighbor (A.B.C.D|X:X::X:X|WORD)",')
|
||||
line = line.replace('NO_NEIGHBOR_CMD,', '"no neighbor (A.B.C.D|X:X::X:X)",')
|
||||
line = line.replace('NEIGHBOR_CMD,', '"neighbor (A.B.C.D|X:X::X:X)",')
|
||||
line = line.replace('PIM_CMD_IP_MULTICAST_ROUTING,', '"ip multicast-routing",')
|
||||
|
||||
if line.rstrip().endswith('" ,'):
|
||||
line = line.replace('" ,', '",')
|
||||
line = expand_command_string(line)
|
||||
command_string = line
|
||||
|
||||
'''
|
||||
|
@ -130,12 +130,13 @@ DEFUN (debug_zebra_packet_direct,
|
||||
"Debug option set for receive packet\n"
|
||||
"Debug option set for send packet\n")
|
||||
{
|
||||
int idx_recv_send = 3;
|
||||
zebra_debug_packet = ZEBRA_DEBUG_PACKET;
|
||||
if (strncmp ("send", argv[3]->arg, strlen (argv[3]->arg)) == 0)
|
||||
if (strncmp ("send", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
|
||||
if (strncmp ("recv", argv[3]->arg, strlen (argv[3]->arg)) == 0)
|
||||
if (strncmp ("recv", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
|
||||
if (strncmp ("detail", argv[3]->arg, strlen (argv[3]->arg)) == 0)
|
||||
if (strncmp ("detail", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_DETAIL);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -150,10 +151,11 @@ DEFUN (debug_zebra_packet_detail,
|
||||
"Debug option set for send packet\n"
|
||||
"Debug option set detailed information\n")
|
||||
{
|
||||
int idx_recv_send = 3;
|
||||
zebra_debug_packet = ZEBRA_DEBUG_PACKET;
|
||||
if (strncmp ("send", argv[3]->arg, strlen (argv[3]->arg)) == 0)
|
||||
if (strncmp ("send", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
|
||||
if (strncmp ("recv", argv[3]->arg, strlen (argv[3]->arg)) == 0)
|
||||
if (strncmp ("recv", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
|
||||
SET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_DETAIL);
|
||||
return CMD_SUCCESS;
|
||||
@ -180,9 +182,10 @@ DEFUN (debug_zebra_kernel_msgdump,
|
||||
"Dump raw netlink messages received\n"
|
||||
"Dump raw netlink messages sent\n")
|
||||
{
|
||||
if (argv[4]->arg && strncmp(argv[4]->arg, "recv", strlen(argv[4]->arg)) == 0)
|
||||
int idx_recv_send = 4;
|
||||
if (argv[idx_recv_send]->arg && strncmp(argv[idx_recv_send]->arg, "recv", strlen(argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
|
||||
if (!argv[4]->arg || strncmp(argv[4]->arg, "send", strlen(argv[4]->arg)) == 0)
|
||||
if (!argv[idx_recv_send]->arg || strncmp(argv[idx_recv_send]->arg, "send", strlen(argv[idx_recv_send]->arg)) == 0)
|
||||
SET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -267,9 +270,10 @@ DEFUN (no_debug_zebra_packet_direct,
|
||||
"Debug option set for receive packet\n"
|
||||
"Debug option set for send packet\n")
|
||||
{
|
||||
if (strncmp ("send", argv[4]->arg, strlen (argv[4]->arg)) == 0)
|
||||
int idx_recv_send = 4;
|
||||
if (strncmp ("send", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
UNSET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_SEND);
|
||||
if (strncmp ("recv", argv[4]->arg, strlen (argv[4]->arg)) == 0)
|
||||
if (strncmp ("recv", argv[idx_recv_send]->arg, strlen (argv[idx_recv_send]->arg)) == 0)
|
||||
UNSET_FLAG(zebra_debug_packet, ZEBRA_DEBUG_RECV);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -296,9 +300,10 @@ DEFUN (no_debug_zebra_kernel_msgdump,
|
||||
"Dump raw netlink messages received\n"
|
||||
"Dump raw netlink messages sent\n")
|
||||
{
|
||||
if (!argv[1] || (argv[5]->arg && strncmp(argv[5]->arg, "recv", strlen(argv[5]->arg)) == 0))
|
||||
int idx_recv_send = 5;
|
||||
if (!argv[1] || (argv[idx_recv_send]->arg && strncmp(argv[idx_recv_send]->arg, "recv", strlen(argv[idx_recv_send]->arg)) == 0))
|
||||
UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_RECV);
|
||||
if (!argv[5]->arg || (argv[5]->arg && strncmp(argv[5]->arg, "send", strlen(argv[5]->arg)) == 0))
|
||||
if (!argv[idx_recv_send]->arg || (argv[idx_recv_send]->arg && strncmp(argv[idx_recv_send]->arg, "send", strlen(argv[idx_recv_send]->arg)) == 0))
|
||||
UNSET_FLAG(zebra_debug_kernel, ZEBRA_DEBUG_KERNEL_MSGDUMP_SEND);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -1361,19 +1361,21 @@ DEFUN (show_interface_name_vrf,
|
||||
"Interface name\n"
|
||||
VRF_CMD_HELP_STR)
|
||||
{
|
||||
int idx_ifname = 2;
|
||||
int idx_name = 4;
|
||||
struct interface *ifp;
|
||||
vrf_id_t vrf_id = VRF_DEFAULT;
|
||||
|
||||
interface_update_stats ();
|
||||
|
||||
if (argc > 1)
|
||||
VRF_GET_ID (vrf_id, argv[4]->arg);
|
||||
VRF_GET_ID (vrf_id, argv[idx_name]->arg);
|
||||
|
||||
/* Specified interface print. */
|
||||
ifp = if_lookup_by_name_vrf (argv[2]->arg, vrf_id);
|
||||
ifp = if_lookup_by_name_vrf (argv[idx_ifname]->arg, vrf_id);
|
||||
if (ifp == NULL)
|
||||
{
|
||||
vty_out (vty, "%% Can't find interface %s%s", argv[2]->arg,
|
||||
vty_out (vty, "%% Can't find interface %s%s", argv[idx_ifname]->arg,
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
@ -1399,6 +1401,7 @@ DEFUN (show_interface_name_vrf_all,
|
||||
"Interface name\n"
|
||||
VRF_ALL_CMD_HELP_STR)
|
||||
{
|
||||
int idx_ifname = 2;
|
||||
struct interface *ifp;
|
||||
vrf_iter_t iter;
|
||||
int found = 0;
|
||||
@ -1409,7 +1412,7 @@ DEFUN (show_interface_name_vrf_all,
|
||||
for (iter = vrf_first (); iter != VRF_ITER_INVALID; iter = vrf_next (iter))
|
||||
{
|
||||
/* Specified interface print. */
|
||||
ifp = if_lookup_by_name_vrf (argv[2]->arg, vrf_iter2id (iter));
|
||||
ifp = if_lookup_by_name_vrf (argv[idx_ifname]->arg, vrf_iter2id (iter));
|
||||
if (ifp)
|
||||
{
|
||||
if_dump_vty (vty, ifp);
|
||||
@ -1419,7 +1422,7 @@ DEFUN (show_interface_name_vrf_all,
|
||||
|
||||
if (!found)
|
||||
{
|
||||
vty_out (vty, "%% Can't find interface %s%s", argv[2]->arg, VTY_NEWLINE);
|
||||
vty_out (vty, "%% Can't find interface %s%s", argv[idx_ifname]->arg, VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
@ -1678,11 +1681,12 @@ DEFUN (bandwidth_if,
|
||||
"Set bandwidth informational parameter\n"
|
||||
"Bandwidth in megabits\n")
|
||||
{
|
||||
int idx_number = 1;
|
||||
struct interface *ifp;
|
||||
unsigned int bandwidth;
|
||||
|
||||
ifp = (struct interface *) vty->index;
|
||||
bandwidth = strtol(argv[1]->arg, NULL, 10);
|
||||
bandwidth = strtol(argv[idx_number]->arg, NULL, 10);
|
||||
|
||||
/* bandwidth range is <1-100000> */
|
||||
if (bandwidth < 1 || bandwidth > 100000)
|
||||
@ -1844,11 +1848,12 @@ DEFUN (link_params_metric,
|
||||
"Link metric for MPLS-TE purpose\n"
|
||||
"Metric value in decimal\n")
|
||||
{
|
||||
int idx_number = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
u_int32_t metric;
|
||||
|
||||
VTY_GET_ULONG("metric", metric, argv[1]->arg);
|
||||
VTY_GET_ULONG("metric", metric, argv[idx_number]->arg);
|
||||
|
||||
/* Update TE metric if needed */
|
||||
link_param_cmd_set_uint32 (ifp, &iflp->te_metric, LP_TE, metric);
|
||||
@ -1876,12 +1881,13 @@ DEFUN (link_params_maxbw,
|
||||
"Maximum bandwidth that can be used\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_bandwidth = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
|
||||
float bw;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_maxbw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -1920,11 +1926,12 @@ DEFUN (link_params_max_rsv_bw,
|
||||
"Maximum bandwidth that may be reserved\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_bandwidth = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
float bw;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_max_rsv_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -1953,20 +1960,22 @@ DEFUN (link_params_unrsv_bw,
|
||||
"Priority\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_number = 1;
|
||||
int idx_bandwidth = 2;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
int priority;
|
||||
float bw;
|
||||
|
||||
/* We don't have to consider about range check here. */
|
||||
if (sscanf (argv[1]->arg, "%d", &priority) != 1)
|
||||
if (sscanf (argv[idx_number]->arg, "%d", &priority) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_unrsv_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
if (sscanf (argv[2]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_unrsv_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -1994,11 +2003,12 @@ DEFUN (link_params_admin_grp,
|
||||
"Administrative group membership\n"
|
||||
"32-bit Hexadecimal value (e.g. 0xa1)\n")
|
||||
{
|
||||
int idx_bitpattern = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
unsigned long value;
|
||||
|
||||
if (sscanf (argv[1]->arg, "0x%lx", &value) != 1)
|
||||
if (sscanf (argv[idx_bitpattern]->arg, "0x%lx", &value) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_admin_grp: fscanf: %s%s",
|
||||
safe_strerror (errno), VTY_NEWLINE);
|
||||
@ -2034,19 +2044,21 @@ DEFUN (link_params_inter_as,
|
||||
"Remote AS number\n"
|
||||
"AS number in the range <1-4294967295>\n")
|
||||
{
|
||||
int idx_ipv4 = 1;
|
||||
int idx_number = 3;
|
||||
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
struct in_addr addr;
|
||||
u_int32_t as;
|
||||
|
||||
if (!inet_aton (argv[1]->arg, &addr))
|
||||
if (!inet_aton (argv[idx_ipv4]->arg, &addr))
|
||||
{
|
||||
vty_out (vty, "Please specify Router-Addr by A.B.C.D%s", VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
||||
VTY_GET_ULONG("AS number", as, argv[3]->arg);
|
||||
VTY_GET_ULONG("AS number", as, argv[idx_number]->arg);
|
||||
|
||||
/* Update Remote IP and Remote AS fields if needed */
|
||||
if (IS_PARAM_UNSET(iflp, LP_RMT_AS)
|
||||
@ -2105,6 +2117,7 @@ DEFUN (link_params_delay,
|
||||
"Unidirectional Average Link Delay\n"
|
||||
"Average delay in micro-second as decimal (0...16777215)\n")
|
||||
{
|
||||
int idx_number = 1;
|
||||
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
@ -2112,7 +2125,7 @@ DEFUN (link_params_delay,
|
||||
u_int8_t update = 0;
|
||||
|
||||
/* Get and Check new delay values */
|
||||
VTY_GET_ULONG("delay", delay, argv[1]->arg);
|
||||
VTY_GET_ULONG("delay", delay, argv[idx_number]->arg);
|
||||
switch (argc)
|
||||
{
|
||||
case 1:
|
||||
@ -2212,11 +2225,12 @@ DEFUN (link_params_delay_var,
|
||||
"Unidirectional Link Delay Variation\n"
|
||||
"delay variation in micro-second as decimal (0...16777215)\n")
|
||||
{
|
||||
int idx_number = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
u_int32_t value;
|
||||
|
||||
VTY_GET_ULONG("delay variation", value, argv[1]->arg);
|
||||
VTY_GET_ULONG("delay variation", value, argv[idx_number]->arg);
|
||||
|
||||
/* Update Delay Variation if needed */
|
||||
link_param_cmd_set_uint32 (ifp, &iflp->delay_var, LP_DELAY_VAR, value);
|
||||
@ -2244,11 +2258,12 @@ DEFUN (link_params_pkt_loss,
|
||||
"Unidirectional Link Packet Loss\n"
|
||||
"percentage of total traffic by 0.000003% step and less than 50.331642%\n")
|
||||
{
|
||||
int idx_percentage = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
float fval;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &fval) != 1)
|
||||
if (sscanf (argv[idx_percentage]->arg, "%g", &fval) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_pkt_loss: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -2284,11 +2299,12 @@ DEFUN (link_params_res_bw,
|
||||
"Unidirectional Residual Bandwidth\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_bandwidth = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
float bw;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_res_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -2330,11 +2346,12 @@ DEFUN (link_params_ava_bw,
|
||||
"Unidirectional Available Bandwidth\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_bandwidth = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
float bw;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_ava_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -2376,11 +2393,12 @@ DEFUN (link_params_use_bw,
|
||||
"Unidirectional Utilised Bandwidth\n"
|
||||
"Bytes/second (IEEE floating point format)\n")
|
||||
{
|
||||
int idx_bandwidth = 1;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct if_link_params *iflp = if_link_params_get (ifp);
|
||||
float bw;
|
||||
|
||||
if (sscanf (argv[1]->arg, "%g", &bw) != 1)
|
||||
if (sscanf (argv[idx_bandwidth]->arg, "%g", &bw) != 1)
|
||||
{
|
||||
vty_out (vty, "link_params_use_bw: fscanf: %s%s", safe_strerror (errno),
|
||||
VTY_NEWLINE);
|
||||
@ -2564,7 +2582,8 @@ DEFUN (ip_address,
|
||||
"Set the IP address of an interface\n"
|
||||
"IP address (e.g. 10.0.0.1/8)\n")
|
||||
{
|
||||
return ip_address_install (vty, vty->index, argv[2]->arg, NULL, NULL);
|
||||
int idx_ipv4_prefixlen = 2;
|
||||
return ip_address_install (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, NULL, NULL);
|
||||
}
|
||||
|
||||
DEFUN (no_ip_address,
|
||||
@ -2575,7 +2594,8 @@ DEFUN (no_ip_address,
|
||||
"Set the IP address of an interface\n"
|
||||
"IP Address (e.g. 10.0.0.1/8)")
|
||||
{
|
||||
return ip_address_uninstall (vty, vty->index, argv[3]->arg, NULL, NULL);
|
||||
int idx_ipv4_prefixlen = 3;
|
||||
return ip_address_uninstall (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
@ -2589,7 +2609,9 @@ DEFUN (ip_address_label,
|
||||
"Label of this address\n"
|
||||
"Label\n")
|
||||
{
|
||||
return ip_address_install (vty, vty->index, argv[2]->arg, NULL, argv[4]->arg);
|
||||
int idx_ipv4_prefixlen = 2;
|
||||
int idx_line = 4;
|
||||
return ip_address_install (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_line]->arg);
|
||||
}
|
||||
|
||||
DEFUN (no_ip_address_label,
|
||||
@ -2602,7 +2624,9 @@ DEFUN (no_ip_address_label,
|
||||
"Label of this address\n"
|
||||
"Label\n")
|
||||
{
|
||||
return ip_address_uninstall (vty, vty->index, argv[3]->arg, NULL, argv[5]->arg);
|
||||
int idx_ipv4_prefixlen = 3;
|
||||
int idx_line = 5;
|
||||
return ip_address_uninstall (vty, vty->index, argv[idx_ipv4_prefixlen]->arg, NULL, argv[idx_line]->arg);
|
||||
}
|
||||
#endif /* HAVE_NETLINK */
|
||||
|
||||
@ -2765,7 +2789,8 @@ DEFUN (ipv6_address,
|
||||
"Set the IP address of an interface\n"
|
||||
"IPv6 address (e.g. 3ffe:506::1/48)\n")
|
||||
{
|
||||
return ipv6_address_install (vty, vty->index, argv[2]->arg, NULL, NULL, 0);
|
||||
int idx_ipv6_prefixlen = 2;
|
||||
return ipv6_address_install (vty, vty->index, argv[idx_ipv6_prefixlen]->arg, NULL, NULL, 0);
|
||||
}
|
||||
|
||||
DEFUN (no_ipv6_address,
|
||||
@ -2776,7 +2801,8 @@ DEFUN (no_ipv6_address,
|
||||
"Set the IP address of an interface\n"
|
||||
"IPv6 address (e.g. 3ffe:506::1/48)\n")
|
||||
{
|
||||
return ipv6_address_uninstall (vty, vty->index, argv[3]->arg, NULL, NULL, 0);
|
||||
int idx_ipv6_prefixlen = 3;
|
||||
return ipv6_address_uninstall (vty, vty->index, argv[idx_ipv6_prefixlen]->arg, NULL, NULL, 0);
|
||||
}
|
||||
#endif /* HAVE_IPV6 */
|
||||
|
||||
|
@ -469,6 +469,7 @@ DEFUN (ip_irdp_holdtime,
|
||||
"Set holdtime value\n"
|
||||
"Holdtime value in seconds. Default is 1800 seconds\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zi;
|
||||
struct irdp_interface *irdp;
|
||||
@ -480,7 +481,7 @@ DEFUN (ip_irdp_holdtime,
|
||||
zi=ifp->info;
|
||||
irdp=&zi->irdp;
|
||||
|
||||
irdp->Lifetime = atoi(argv[3]->arg);
|
||||
irdp->Lifetime = atoi(argv[idx_number]->arg);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -492,6 +493,7 @@ DEFUN (ip_irdp_minadvertinterval,
|
||||
"Set minimum time between advertisement\n"
|
||||
"Minimum advertisement interval in seconds\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zi;
|
||||
struct irdp_interface *irdp;
|
||||
@ -503,8 +505,8 @@ DEFUN (ip_irdp_minadvertinterval,
|
||||
zi=ifp->info;
|
||||
irdp=&zi->irdp;
|
||||
|
||||
if( (unsigned) atoi(argv[3]->arg) <= irdp->MaxAdvertInterval) {
|
||||
irdp->MinAdvertInterval = atoi(argv[3]->arg);
|
||||
if( (unsigned) atoi(argv[idx_number]->arg) <= irdp->MaxAdvertInterval) {
|
||||
irdp->MinAdvertInterval = atoi(argv[idx_number]->arg);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -525,6 +527,7 @@ DEFUN (ip_irdp_maxadvertinterval,
|
||||
"Set maximum time between advertisement\n"
|
||||
"Maximum advertisement interval in seconds\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zi;
|
||||
struct irdp_interface *irdp;
|
||||
@ -537,8 +540,8 @@ DEFUN (ip_irdp_maxadvertinterval,
|
||||
irdp=&zi->irdp;
|
||||
|
||||
|
||||
if( irdp->MinAdvertInterval <= (unsigned) atoi(argv[3]->arg) ) {
|
||||
irdp->MaxAdvertInterval = atoi(argv[3]->arg);
|
||||
if( irdp->MinAdvertInterval <= (unsigned) atoi(argv[idx_number]->arg) ) {
|
||||
irdp->MaxAdvertInterval = atoi(argv[idx_number]->arg);
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
@ -564,6 +567,7 @@ DEFUN (ip_irdp_preference,
|
||||
"Set default preference level for this interface\n"
|
||||
"Preference level\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zi;
|
||||
struct irdp_interface *irdp;
|
||||
@ -575,7 +579,7 @@ DEFUN (ip_irdp_preference,
|
||||
zi=ifp->info;
|
||||
irdp=&zi->irdp;
|
||||
|
||||
irdp->Preference = atoi(argv[3]->arg);
|
||||
irdp->Preference = atoi(argv[idx_number]->arg);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -588,6 +592,8 @@ DEFUN (ip_irdp_address_preference,
|
||||
"Set IRDP address for advertise\n"
|
||||
"Preference level\n")
|
||||
{
|
||||
int idx_ipv4 = 3;
|
||||
int idx_number = 5;
|
||||
struct listnode *node;
|
||||
struct in_addr ip;
|
||||
int pref;
|
||||
@ -605,10 +611,10 @@ DEFUN (ip_irdp_address_preference,
|
||||
zi=ifp->info;
|
||||
irdp=&zi->irdp;
|
||||
|
||||
ret = inet_aton(argv[3]->arg, &ip);
|
||||
ret = inet_aton(argv[idx_ipv4]->arg, &ip);
|
||||
if(!ret) return CMD_WARNING;
|
||||
|
||||
pref = atoi(argv[5]->arg);
|
||||
pref = atoi(argv[idx_number]->arg);
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO (irdp->AdvPrefList, node, adv))
|
||||
if(adv->ip.s_addr == ip.s_addr)
|
||||
@ -633,6 +639,7 @@ DEFUN (no_ip_irdp_address_preference,
|
||||
"Select IRDP address\n"
|
||||
"Old preference level\n")
|
||||
{
|
||||
int idx_ipv4 = 4;
|
||||
struct listnode *node, *nnode;
|
||||
struct in_addr ip;
|
||||
int ret;
|
||||
@ -649,7 +656,7 @@ DEFUN (no_ip_irdp_address_preference,
|
||||
zi=ifp->info;
|
||||
irdp=&zi->irdp;
|
||||
|
||||
ret = inet_aton(argv[4]->arg, &ip);
|
||||
ret = inet_aton(argv[idx_ipv4]->arg, &ip);
|
||||
if (!ret)
|
||||
return CMD_WARNING;
|
||||
|
||||
|
@ -228,10 +228,11 @@ DEFUN (router_id,
|
||||
"Manually set the router-id\n"
|
||||
"IP address to use for router-id\n")
|
||||
{
|
||||
int idx_ipv4 = 1;
|
||||
struct prefix rid;
|
||||
vrf_id_t vrf_id = VRF_DEFAULT;
|
||||
|
||||
rid.u.prefix4.s_addr = inet_addr (argv[1]->arg);
|
||||
rid.u.prefix4.s_addr = inet_addr (argv[idx_ipv4]->arg);
|
||||
if (!rid.u.prefix4.s_addr)
|
||||
return CMD_WARNING;
|
||||
|
||||
|
@ -923,6 +923,7 @@ DEFUN (ipv6_nd_ra_interval_msec,
|
||||
"Router Advertisement interval\n"
|
||||
"Router Advertisement interval in milliseconds\n")
|
||||
{
|
||||
int idx_number = 4;
|
||||
unsigned interval;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
@ -930,7 +931,7 @@ DEFUN (ipv6_nd_ra_interval_msec,
|
||||
struct zebra_ns *zns;
|
||||
|
||||
zns = zvrf->zns;
|
||||
VTY_GET_INTEGER_RANGE ("router advertisement interval", interval, argv[4]->arg, 70, 1800000);
|
||||
VTY_GET_INTEGER_RANGE ("router advertisement interval", interval, argv[idx_number]->arg, 70, 1800000);
|
||||
if ((zif->rtadv.AdvDefaultLifetime != -1 && interval > (unsigned)zif->rtadv.AdvDefaultLifetime * 1000))
|
||||
{
|
||||
vty_out (vty, "This ra-interval would conflict with configured ra-lifetime!%s", VTY_NEWLINE);
|
||||
@ -958,6 +959,7 @@ DEFUN (ipv6_nd_ra_interval,
|
||||
"Router Advertisement interval\n"
|
||||
"Router Advertisement interval in seconds\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
unsigned interval;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
@ -965,7 +967,7 @@ DEFUN (ipv6_nd_ra_interval,
|
||||
struct zebra_ns *zns;
|
||||
|
||||
zns = zvrf->zns;
|
||||
VTY_GET_INTEGER_RANGE ("router advertisement interval", interval, argv[3]->arg, 1, 1800);
|
||||
VTY_GET_INTEGER_RANGE ("router advertisement interval", interval, argv[idx_number]->arg, 1, 1800);
|
||||
if ((zif->rtadv.AdvDefaultLifetime != -1 && interval > (unsigned)zif->rtadv.AdvDefaultLifetime))
|
||||
{
|
||||
vty_out (vty, "This ra-interval would conflict with configured ra-lifetime!%s", VTY_NEWLINE);
|
||||
@ -1039,6 +1041,7 @@ DEFUN (ipv6_nd_ra_lifetime,
|
||||
"Router lifetime\n"
|
||||
"Router lifetime in seconds (0 stands for a non-default gw)\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
int lifetime;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zif;
|
||||
@ -1046,7 +1049,7 @@ DEFUN (ipv6_nd_ra_lifetime,
|
||||
ifp = (struct interface *) vty->index;
|
||||
zif = ifp->info;
|
||||
|
||||
VTY_GET_INTEGER_RANGE ("router lifetime", lifetime, argv[3]->arg, 0, 9000);
|
||||
VTY_GET_INTEGER_RANGE ("router lifetime", lifetime, argv[idx_number]->arg, 0, 9000);
|
||||
|
||||
/* The value to be placed in the Router Lifetime field
|
||||
* of Router Advertisements sent from the interface,
|
||||
@ -1101,9 +1104,10 @@ DEFUN (ipv6_nd_reachable_time,
|
||||
"Reachable time\n"
|
||||
"Reachable time in milliseconds\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
VTY_GET_INTEGER_RANGE ("reachable time", zif->rtadv.AdvReachableTime, argv[3]->arg, 1, RTADV_MAX_REACHABLE_TIME);
|
||||
VTY_GET_INTEGER_RANGE ("reachable time", zif->rtadv.AdvReachableTime, argv[idx_number]->arg, 1, RTADV_MAX_REACHABLE_TIME);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -1145,9 +1149,10 @@ DEFUN (ipv6_nd_homeagent_preference,
|
||||
"Home Agent preference\n"
|
||||
"preference value (default is 0, least preferred)\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
VTY_GET_INTEGER_RANGE ("home agent preference", zif->rtadv.HomeAgentPreference, argv[3]->arg, 0, 65535);
|
||||
VTY_GET_INTEGER_RANGE ("home agent preference", zif->rtadv.HomeAgentPreference, argv[idx_number]->arg, 0, 65535);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -1189,9 +1194,10 @@ DEFUN (ipv6_nd_homeagent_lifetime,
|
||||
"Home Agent lifetime\n"
|
||||
"Home Agent lifetime in seconds (0 to track ra-lifetime)\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
VTY_GET_INTEGER_RANGE ("home agent lifetime", zif->rtadv.HomeAgentLifetime, argv[3]->arg, 0, RTADV_MAX_HALIFETIME);
|
||||
VTY_GET_INTEGER_RANGE ("home agent lifetime", zif->rtadv.HomeAgentLifetime, argv[idx_number]->arg, 0, RTADV_MAX_HALIFETIME);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -1508,7 +1514,7 @@ DEFUN (no_ipv6_nd_other_config_flag,
|
||||
*/
|
||||
DEFUN (ipv6_nd_prefix,
|
||||
ipv6_nd_prefix_cmd,
|
||||
"ipv6 nd prefix X:X::X:X/M <(0-4294967295)|infinite> <(0-4294967295)|infinite> <off-link|> <no-autoconfig|> <router-address|>",
|
||||
"ipv6 nd prefix X:X::X:X/M <(0-4294967295)|infinite> <(0-4294967295)|infinite> <off-link> <no-autoconfig> <router-address>",
|
||||
"Interface IPv6 config commands\n"
|
||||
"Neighbor discovery\n"
|
||||
"Prefix information\n"
|
||||
@ -1521,6 +1527,9 @@ DEFUN (ipv6_nd_prefix,
|
||||
"Do not use prefix for autoconfiguration\n"
|
||||
"Set Router Address flag\n")
|
||||
{
|
||||
int idx_ipv6_prefixlen = 3;
|
||||
int idx_number_infinite = 4;
|
||||
int idx_number_infinite_2 = 5;
|
||||
int i;
|
||||
int ret;
|
||||
int cursor = 1;
|
||||
@ -1531,7 +1540,7 @@ DEFUN (ipv6_nd_prefix,
|
||||
ifp = (struct interface *) vty->index;
|
||||
zebra_if = ifp->info;
|
||||
|
||||
ret = str2prefix_ipv6 (argv[3]->arg, &rp.prefix);
|
||||
ret = str2prefix_ipv6 (argv[idx_ipv6_prefixlen]->arg, &rp.prefix);
|
||||
if (!ret)
|
||||
{
|
||||
vty_out (vty, "Malformed IPv6 prefix%s", VTY_NEWLINE);
|
||||
@ -1546,19 +1555,19 @@ DEFUN (ipv6_nd_prefix,
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
if ((isdigit((unsigned char)argv[4]->arg[0]))
|
||||
|| strncmp (argv[4]->arg, "i", 1) == 0)
|
||||
if ((isdigit((unsigned char)argv[idx_number_infinite]->arg[0]))
|
||||
|| strncmp (argv[idx_number_infinite]->arg, "i", 1) == 0)
|
||||
{
|
||||
if ( strncmp (argv[4]->arg, "i", 1) == 0)
|
||||
if ( strncmp (argv[idx_number_infinite]->arg, "i", 1) == 0)
|
||||
rp.AdvValidLifetime = UINT32_MAX;
|
||||
else
|
||||
rp.AdvValidLifetime = (u_int32_t) strtoll (argv[4]->arg,
|
||||
rp.AdvValidLifetime = (u_int32_t) strtoll (argv[idx_number_infinite]->arg,
|
||||
(char **)NULL, 10);
|
||||
|
||||
if ( strncmp (argv[5]->arg, "i", 1) == 0)
|
||||
if ( strncmp (argv[idx_number_infinite_2]->arg, "i", 1) == 0)
|
||||
rp.AdvPreferredLifetime = UINT32_MAX;
|
||||
else
|
||||
rp.AdvPreferredLifetime = (u_int32_t) strtoll (argv[5]->arg,
|
||||
rp.AdvPreferredLifetime = (u_int32_t) strtoll (argv[idx_number_infinite_2]->arg,
|
||||
(char **)NULL, 10);
|
||||
|
||||
if (rp.AdvPreferredLifetime > rp.AdvValidLifetime)
|
||||
@ -1790,6 +1799,7 @@ DEFUN (ipv6_nd_router_preference,
|
||||
"Low default router preference\n"
|
||||
"Medium default router preference (default)\n")
|
||||
{
|
||||
int idx_high_medium_low = 3;
|
||||
struct interface *ifp;
|
||||
struct zebra_if *zif;
|
||||
int i = 0;
|
||||
@ -1799,7 +1809,7 @@ DEFUN (ipv6_nd_router_preference,
|
||||
|
||||
while (0 != rtadv_pref_strs[i])
|
||||
{
|
||||
if (strncmp (argv[3]->arg, rtadv_pref_strs[i], 1) == 0)
|
||||
if (strncmp (argv[idx_high_medium_low]->arg, rtadv_pref_strs[i], 1) == 0)
|
||||
{
|
||||
zif->rtadv.DefaultPreference = i;
|
||||
return CMD_SUCCESS;
|
||||
@ -1850,9 +1860,10 @@ DEFUN (ipv6_nd_mtu,
|
||||
"Advertised MTU\n"
|
||||
"MTU in bytes\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
struct interface *ifp = (struct interface *) vty->index;
|
||||
struct zebra_if *zif = ifp->info;
|
||||
VTY_GET_INTEGER_RANGE ("MTU", zif->rtadv.AdvLinkMTU, argv[3]->arg, 1, 65535);
|
||||
VTY_GET_INTEGER_RANGE ("MTU", zif->rtadv.AdvLinkMTU, argv[idx_number]->arg, 1, 65535);
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -124,6 +124,7 @@ DEFUN (test_interface_state,
|
||||
"up\n"
|
||||
"down\n")
|
||||
{
|
||||
int idx_up_down = 1;
|
||||
struct interface *ifp;
|
||||
if (argc < 1)
|
||||
return CMD_WARNING;
|
||||
@ -136,7 +137,7 @@ DEFUN (test_interface_state,
|
||||
ifp->flags = IFF_BROADCAST|IFF_MULTICAST;
|
||||
}
|
||||
|
||||
switch (argv[1]->arg[0])
|
||||
switch (argv[idx_up_down]->arg[0])
|
||||
{
|
||||
case 'u':
|
||||
SET_FLAG (ifp->flags, IFF_UP);
|
||||
|
@ -301,7 +301,8 @@ DEFUN (match_interface,
|
||||
"match first hop interface of route\n"
|
||||
"Interface name\n")
|
||||
{
|
||||
return zebra_route_match_add (vty, vty->index, "interface", argv[2]->arg,
|
||||
int idx_word = 2;
|
||||
return zebra_route_match_add (vty, vty->index, "interface", argv[idx_word]->arg,
|
||||
RMAP_EVENT_MATCH_ADDED);
|
||||
}
|
||||
|
||||
@ -335,7 +336,8 @@ DEFUN (match_tag,
|
||||
"Match tag of route\n"
|
||||
"Tag value\n")
|
||||
{
|
||||
return zebra_route_match_add (vty, vty->index, "tag", argv[2]->arg,
|
||||
int idx_number = 2;
|
||||
return zebra_route_match_add (vty, vty->index, "tag", argv[idx_number]->arg,
|
||||
RMAP_EVENT_MATCH_ADDED);
|
||||
}
|
||||
|
||||
@ -373,7 +375,8 @@ DEFUN (match_ip_next_hop,
|
||||
"IP access-list number (expanded range)\n"
|
||||
"IP Access-list name\n")
|
||||
{
|
||||
return zebra_route_match_add (vty, vty->index, "ip next-hop", argv[3]->arg, RMAP_EVENT_FILTER_ADDED);
|
||||
int idx_acl = 3;
|
||||
return zebra_route_match_add (vty, vty->index, "ip next-hop", argv[idx_acl]->arg, RMAP_EVENT_FILTER_ADDED);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -414,8 +417,9 @@ DEFUN (match_ip_next_hop_prefix_list,
|
||||
"Match entries of prefix-lists\n"
|
||||
"IP prefix-list name\n")
|
||||
{
|
||||
int idx_word = 4;
|
||||
return zebra_route_match_add (vty, vty->index, "ip next-hop prefix-list",
|
||||
argv[4]->arg, RMAP_EVENT_PLIST_ADDED);
|
||||
argv[idx_word]->arg, RMAP_EVENT_PLIST_ADDED);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -460,7 +464,8 @@ DEFUN (match_ip_address,
|
||||
"IP Access-list name\n")
|
||||
|
||||
{
|
||||
return zebra_route_match_add (vty, vty->index, "ip address", argv[3]->arg,
|
||||
int idx_acl = 3;
|
||||
return zebra_route_match_add (vty, vty->index, "ip address", argv[idx_acl]->arg,
|
||||
RMAP_EVENT_FILTER_ADDED);
|
||||
}
|
||||
|
||||
@ -502,8 +507,9 @@ DEFUN (match_ip_address_prefix_list,
|
||||
"Match entries of prefix-lists\n"
|
||||
"IP prefix-list name\n")
|
||||
{
|
||||
int idx_word = 4;
|
||||
return zebra_route_match_add (vty, vty->index, "ip address prefix-list",
|
||||
argv[4]->arg, RMAP_EVENT_PLIST_ADDED);
|
||||
argv[idx_word]->arg, RMAP_EVENT_PLIST_ADDED);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -627,17 +633,18 @@ DEFUN (match_source_protocol,
|
||||
MATCH_STR
|
||||
"Match protocol via which the route was learnt\n")
|
||||
{
|
||||
int idx_protocol = 2;
|
||||
int i;
|
||||
|
||||
i = proto_name2num(argv[2]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[2]->arg ? argv[2]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
return zebra_route_match_add (vty, vty->index, "source-protocol",
|
||||
argv[2]->arg, RMAP_EVENT_MATCH_ADDED);
|
||||
argv[idx_protocol]->arg, RMAP_EVENT_MATCH_ADDED);
|
||||
}
|
||||
|
||||
DEFUN (no_match_source_protocol,
|
||||
@ -647,20 +654,21 @@ DEFUN (no_match_source_protocol,
|
||||
MATCH_STR
|
||||
"No match protocol via which the route was learnt\n")
|
||||
{
|
||||
int idx_protocol = 3;
|
||||
int i;
|
||||
|
||||
if (argc >= 1)
|
||||
{
|
||||
i = proto_name2num(argv[3]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[3]->arg ? argv[3]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
}
|
||||
return zebra_route_match_delete (vty, vty->index,
|
||||
"source-protocol", argv[3]->arg ? argv[3]->arg : NULL,
|
||||
"source-protocol", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : NULL,
|
||||
RMAP_EVENT_MATCH_DELETED);
|
||||
}
|
||||
|
||||
@ -673,15 +681,16 @@ DEFUN (set_src,
|
||||
"src address for route\n"
|
||||
"src address\n")
|
||||
{
|
||||
int idx_ip = 2;
|
||||
union g_addr src;
|
||||
struct interface *pif = NULL;
|
||||
int family;
|
||||
struct prefix p;
|
||||
vrf_iter_t iter;
|
||||
|
||||
if (inet_pton(AF_INET, argv[2]->arg, &src.ipv4) != 1)
|
||||
if (inet_pton(AF_INET, argv[idx_ip]->arg, &src.ipv4) != 1)
|
||||
{
|
||||
if (inet_pton(AF_INET6, argv[2]->arg, &src.ipv6) != 1)
|
||||
if (inet_pton(AF_INET6, argv[idx_ip]->arg, &src.ipv6) != 1)
|
||||
{
|
||||
vty_out (vty, "%% not a valid IPv4/v6 address%s", VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
@ -722,7 +731,7 @@ DEFUN (set_src,
|
||||
vty_out (vty, "%% not a local address%s", VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
return zebra_route_set_add (vty, vty->index, "src", argv[2]->arg);
|
||||
return zebra_route_set_add (vty, vty->index, "src", argv[idx_ip]->arg);
|
||||
}
|
||||
|
||||
DEFUN (no_set_src,
|
||||
@ -732,10 +741,11 @@ DEFUN (no_set_src,
|
||||
SET_STR
|
||||
"Source address for route\n")
|
||||
{
|
||||
int idx_ip = 3;
|
||||
if (argc == 0)
|
||||
return zebra_route_set_delete (vty, vty->index, "src", NULL);
|
||||
|
||||
return zebra_route_set_delete (vty, vty->index, "src", argv[3]->arg);
|
||||
return zebra_route_set_delete (vty, vty->index, "src", argv[idx_ip]->arg);
|
||||
}
|
||||
|
||||
DEFUN (zebra_route_map_timer,
|
||||
@ -744,9 +754,10 @@ DEFUN (zebra_route_map_timer,
|
||||
"Time to wait before route-map updates are processed\n"
|
||||
"0 means event-driven updates are disabled\n")
|
||||
{
|
||||
int idx_number = 3;
|
||||
u_int32_t rmap_delay_timer;
|
||||
|
||||
VTY_GET_INTEGER_RANGE ("delay-timer", rmap_delay_timer, argv[3]->arg, 0, 600);
|
||||
VTY_GET_INTEGER_RANGE ("delay-timer", rmap_delay_timer, argv[idx_number]->arg, 0, 600);
|
||||
zebra_route_map_set_delay_timer(rmap_delay_timer);
|
||||
|
||||
return (CMD_SUCCESS);
|
||||
@ -782,15 +793,16 @@ DEFUN (ip_protocol,
|
||||
QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Route map name\n")
|
||||
{
|
||||
int idx_protocol = 2;
|
||||
int i;
|
||||
|
||||
if (strcasecmp(argv[2]->arg, "any") == 0)
|
||||
if (strcasecmp(argv[idx_protocol]->arg, "any") == 0)
|
||||
i = ZEBRA_ROUTE_MAX;
|
||||
else
|
||||
i = proto_name2num(argv[2]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[2]->arg ? argv[2]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
@ -805,7 +817,7 @@ DEFUN (ip_protocol,
|
||||
|
||||
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
|
||||
zlog_debug ("%u: IPv4 Routemap config for protocol %s, scheduling RIB processing",
|
||||
VRF_DEFAULT, argv[2]->arg);
|
||||
VRF_DEFAULT, argv[idx_protocol]->arg);
|
||||
|
||||
rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
|
||||
return CMD_SUCCESS;
|
||||
@ -897,15 +909,16 @@ DEFUN (ipv6_protocol,
|
||||
QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Route map name\n")
|
||||
{
|
||||
int idx_protocol = 2;
|
||||
int i;
|
||||
|
||||
if (strcasecmp(argv[2]->arg, "any") == 0)
|
||||
if (strcasecmp(argv[idx_protocol]->arg, "any") == 0)
|
||||
i = ZEBRA_ROUTE_MAX;
|
||||
else
|
||||
i = proto_name2num(argv[2]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[2]->arg ? argv[2]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
@ -920,7 +933,7 @@ DEFUN (ipv6_protocol,
|
||||
|
||||
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
|
||||
zlog_debug ("%u: IPv6 Routemap config for protocol %s, scheduling RIB processing",
|
||||
VRF_DEFAULT, argv[2]->arg);
|
||||
VRF_DEFAULT, argv[idx_protocol]->arg);
|
||||
|
||||
rib_update(VRF_DEFAULT, RIB_UPDATE_RMAP_CHANGE);
|
||||
return CMD_SUCCESS;
|
||||
@ -1013,15 +1026,16 @@ DEFUN (ip_protocol_nht_rmap,
|
||||
QUAGGA_IP_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Route map name\n")
|
||||
{
|
||||
int idx_protocol = 2;
|
||||
int i;
|
||||
|
||||
if (strcasecmp(argv[2]->arg, "any") == 0)
|
||||
if (strcasecmp(argv[idx_protocol]->arg, "any") == 0)
|
||||
i = ZEBRA_ROUTE_MAX;
|
||||
else
|
||||
i = proto_name2num(argv[2]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[2]->arg ? argv[2]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
@ -1119,15 +1133,16 @@ DEFUN (ipv6_protocol_nht_rmap,
|
||||
QUAGGA_IP6_PROTOCOL_MAP_HELP_STR_ZEBRA
|
||||
"Route map name\n")
|
||||
{
|
||||
int idx_protocol = 2;
|
||||
int i;
|
||||
|
||||
if (strcasecmp(argv[2]->arg, "any") == 0)
|
||||
if (strcasecmp(argv[idx_protocol]->arg, "any") == 0)
|
||||
i = ZEBRA_ROUTE_MAX;
|
||||
else
|
||||
i = proto_name2num(argv[2]->arg);
|
||||
i = proto_name2num(argv[idx_protocol]->arg);
|
||||
if (i < 0)
|
||||
{
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[2]->arg ? argv[2]->arg : "",
|
||||
vty_out (vty, "invalid protocol name \"%s\"%s", argv[idx_protocol]->arg ? argv[idx_protocol]->arg : "",
|
||||
VTY_NEWLINE);
|
||||
return CMD_WARNING;
|
||||
}
|
||||
|
1182
zebra/zebra_vty.c
1182
zebra/zebra_vty.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user