def __setitem__(self, key, value): if key.startswith("ipdb_"): return if key in ("src", "dst"): v = value.split("/") if len(v) == 2: value, self["%s_len" % key] = v[0], int(v[1]) elif key == "action" and isinstance(value, basestring): value = FR_ACT_NAMES.get(value, (FR_ACT_NAMES.get("FR_ACT_" + value.upper(), value))) dict.__setitem__(self, key, value)
def __setitem__(self, key, value): if key.startswith('ipdb_'): return if key in ('src', 'dst'): v = value.split('/') if len(v) == 2: value, self['%s_len' % key] = v[0], int(v[1]) elif key == 'action' and isinstance(value, basestring): value = (FR_ACT_NAMES.get( value, (FR_ACT_NAMES.get('FR_ACT_' + value.upper(), value)))) dict.__setitem__(self, key, value)
#!/usr/bin/env python from pyroute2 import IPRoute from pyroute2.netlink.rtnl.fibmsg import FR_ACT_NAMES from netaddr import IPNetwork from socket import AF_INET import click ipr = IPRoute() FR_ACT_NAMES_MAP = dict((v, k) for k, v in FR_ACT_NAMES.iteritems()) IPRULES_MAP = { 'family': 'family', 'action': FR_ACT_NAMES_MAP, 'dst_len': 'dst_len', 'src_len': 'src_len', } IPRULE_ATTRS_MAP = { 'priority': 'FRA_PRIORITY', 'table': 'FRA_TABLE', 'src': 'FRA_SRC', 'dst': 'FRA_DST', } def nla_slots_to_dict(slots): return {slot[0]: slot[1] for slot in slots} def map_dict(d, mappings): ret = dict() for k, mapping in mappings.iteritems():