diff --git a/neutron/agent/linux/ip_lib.py b/neutron/agent/linux/ip_lib.py index 04e66bddea1..f0f59124a40 100644 --- a/neutron/agent/linux/ip_lib.py +++ b/neutron/agent/linux/ip_lib.py @@ -1544,8 +1544,10 @@ def list_ip_routes(namespace, ip_version, scope=None, via=None, table=None, return get_attr(device, 'IFLA_IFNAME') def get_proto(proto_number): - if proto_number in rtnl.rt_proto: + if isinstance(proto_number, int) and proto_number in rtnl.rt_proto: return rtnl.rt_proto[proto_number] + elif isinstance(proto_number, str) and proto_number.isnumeric(): + return rtnl.rt_proto[int(proto_number)] elif str(proto_number) in constants.IP_PROTOCOL_NUM_TO_NAME_MAP: return constants.IP_PROTOCOL_NUM_TO_NAME_MAP[str(proto_number)] diff --git a/neutron/privileged/agent/linux/ip_lib.py b/neutron/privileged/agent/linux/ip_lib.py index f444f9a15b0..7ad3af03349 100644 --- a/neutron/privileged/agent/linux/ip_lib.py +++ b/neutron/privileged/agent/linux/ip_lib.py @@ -717,6 +717,8 @@ def _make_pyroute2_route_args(namespace, ip_version, cidr, device, via, table, if metric: args['priority'] = int(metric) if protocol: + if isinstance(protocol, str) and protocol in rtnl.rt_proto: + protocol = rtnl.rt_proto[protocol] args['proto'] = protocol if isinstance(via, (list, tuple)): args['multipath'] = []