예제 #1
0
def lisp_ms_encryption_keys_command(kv_pair):
    for kw in kv_pair.keys():
        value = kv_pair[kw]
        if (kw == "map-register-key"):
            lisp.lisp_ms_encryption_keys = lisp.lisp_parse_auth_key(value)
        #endif
        if (kw == "json-key"):
            lisp.lisp_ms_json_keys = lisp.lisp_parse_auth_key(value)
        #endif
    #endfor
    return
예제 #2
0
def lisp_site_command(kv_pairs):
    global lisp_sites_by_name
    global lisp_sites_by_name_sorted

    site = lisp.lisp_site()

    allowed_rloc_set = []
    if (kv_pairs.has_key("address")):
        for addr in kv_pairs["address"]:
            rloc = lisp.lisp_rloc()
            allowed_rloc_set.append(rloc)
        #endfor
    #endif

    allowed_eid_set = []
    if (kv_pairs.has_key("eid-prefix")):
        for eid in kv_pairs["eid-prefix"]:
            site_eid = lisp.lisp_site_eid(site)
            allowed_eid_set.append(site_eid)
        #endfor
    #endif

    for kw in kv_pairs.keys():
        value = kv_pairs[kw]
        if (kw == "site-name"): site.site_name = value
        if (kw == "description"): site.description = value
        if (kw == "authentication-key"):
            site.auth_key = lisp.lisp_parse_auth_key(value)
        #endif
        if (kw == "shutdown"):
            site.shutdown = True if value == "yes" else False
        #endif

        if (kw == "instance-id"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                if (v == "*"):
                    site_eid.eid.store_iid_range(0, 0)
                else:
                    if (v == ""): v = "0"
                    site_eid.eid.instance_id = int(v)
                    site_eid.group.instance_id = int(v)
                #endif
            #endfor
        #endif
        if (kw == "eid-prefix"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                if (v != ""): site_eid.eid.store_prefix(v)
            #endfor
        #endif
        if (kw == "group-prefix"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                if (v != ""): site_eid.group.store_prefix(v)
            #endfor
        #endif
        if (kw == "accept-more-specifics"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.accept_more_specifics = yes_or_no
            #endfor
        #endif
        if (kw == "force-proxy-reply"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.force_proxy_reply = yes_or_no
            #endfor
        #endif
        if (kw == "force-ttl"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                if (v == ""): continue
                site_eid.force_ttl = None if int(v) == 0 else int(v)
            #endfor
        #endif
        if (kw == "echo-nonce-capable"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.echo_nonce_capable = yes_or_no
            #endfor
        #endif
        if (kw == "force-nat-proxy-reply"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.force_nat_proxy_reply = yes_or_no
            #endfor
        #endif
        if (kw == "pitr-proxy-reply-drop"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.pitr_proxy_reply_drop = yes_or_no
            #endfor
        #endif
        if (kw == "proxy-reply-action"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                site_eid.proxy_reply_action = v
            #endfor
        #endif
        if (kw == "require-signature"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                yes_or_no = True if (v == "yes") else False
                site_eid.require_signature = yes_or_no
            #endfor
        #endif
        if (kw == "policy-name"):
            for i in range(len(allowed_eid_set)):
                site_eid = allowed_eid_set[i]
                v = value[i]
                site_eid.policy = v
            #endfor
        #endif

        if (kw == "address"):
            for i in range(len(allowed_rloc_set)):
                rloc = allowed_rloc_set[i]
                v = value[i]
                if (v != ""): rloc.rloc.store_address(v)
            #endfor
        #endif
        if (kw == "priority"):
            for i in range(len(allowed_rloc_set)):
                rloc = allowed_rloc_set[i]
                v = value[i]
                if (v == ""): v = "0"
                rloc.priority = int(v)
            #endfor
        #endif
        if (kw == "weight"):
            for i in range(len(allowed_rloc_set)):
                rloc = allowed_rloc_set[i]
                v = value[i]
                if (v == ""): v = "0"
                rloc.weight = int(v)
            #endfor
        #endif
    #endfor

    #
    # Do not modify existing entries. We can only support adding new sites.
    #
    if (lisp_sites_by_name.has_key(site.site_name)): return

    #
    # Store values in internal data structures. Inside of lisp_site() sort
    # EID-prefixes.
    #
    lisp_sites_by_name[site.site_name] = site
    lisp_sites_by_name_sorted = sorted(lisp_sites_by_name)

    for site_eid in allowed_eid_set:
        site_eid.add_cache()
        key = site_eid.build_sort_key()
        site.allowed_prefixes[key] = site_eid
    #endfor
    for rloc in allowed_rloc_set:
        key = rloc.rloc.print_address()
        site.allowed_rlocs[key] = rloc
    #endfor

    #
    # Sort the site.allowed_preifxes{} array.
    #
    site.allowed_prefixes_sorted = sorted(site.allowed_prefixes)
    return