示例#1
0
文件: hsa.py 项目: faramirs/wot
def set_field_val(hsf, wc_obj, field, val, process_field=True):
    """ Set a specific field in a wildcard using pyretic fields. """
    def ip2int(ip):
        assert isinstance(ip, IPv4Network)
        numeric_ip = 0
        for p in str(ip.ip).split('.'):
            numeric_ip = (numeric_ip << 8) + int(p)
        return numeric_ip

    def mac2int(mac):
        assert isinstance(mac, str)
        numeric_mac = 0
        for p in mac.split(':'):
            numeric_mac = (numeric_mac << 8) + int(p, 16)
        return numeric_mac

    if field in ['srcmac', 'dstmac']:
        int_val = mac2int(val) if process_field else val
        set_header_field(hsf, wc_obj, field, int_val, 0)
    elif field in ['srcip', 'dstip']:
        int_val = ip2int(val) if process_field else val
        right_pfx = (32 - val.prefixlen) if process_field else 0
        set_header_field(hsf, wc_obj, field, int_val, right_pfx)
    elif field in ['vlan_offset', 'vlan_nbits', 'vlan_total_stages']:
        ''' ignore tagging helper fields. For now, we ensure that these fields
        are irrelevant by sending in a single-stage policy. '''
        pass
    elif not field in ['switch', 'port']:
        assert "%s_pos" % field in hsf
        assert "%s_len" % field in hsf
        set_header_field(hsf, wc_obj, field, val, 0)
    else:
        ''' do nothing '''
        pass
    return wc_obj
示例#2
0
def set_field_val(hsf, wc_obj, field, val, process_field=True):
    """ Set a specific field in a wildcard using pyretic fields. """
    def ip2int(ip):
        assert isinstance(ip, IPv4Network)
        numeric_ip = 0
        for p in str(ip.ip).split('.'):
            numeric_ip = (numeric_ip << 8) + int(p)
        return numeric_ip

    def mac2int(mac):
        assert isinstance(mac, str)
        numeric_mac = 0
        for p in mac.split(':'):
            numeric_mac = (numeric_mac << 8) + int(p, 16)
        return numeric_mac

    if field in ['srcmac', 'dstmac']:
        int_val = mac2int(val) if process_field else val
        set_header_field(hsf, wc_obj, field, int_val, 0)
    elif field in ['srcip', 'dstip']:
        int_val = ip2int(val) if process_field else val
        right_pfx = (32 - val.prefixlen) if process_field else 0
        set_header_field(hsf, wc_obj, field, int_val, right_pfx)
    elif not field in ['switch', 'port']:
        set_header_field(hsf, wc_obj, field, val, 0)
    else:
        ''' do nothing '''
        pass
    return wc_obj