Exemple #1
0
    def read_confd(self):

        rsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

        ns = dhcpd_ns.ns
        cdb.connect(rsock, cdb.READ_SOCKET, '127.0.0.1',
                    _confd.CONFD_PORT, '/')
        cdb.start_session(rsock, cdb.RUNNING)
        cdb.set_namespace(rsock, ns.hash)

        default_lease_time = cdb.get(rsock, "/dhcp/defaultLeaseTime")
        max_lease_time = cdb.get(rsock, "/dhcp/maxLeaseTime")
        log_facility = cdb.get(rsock, "/dhcp/logFacility")

        if log_facility == ns.dhcpd_kern:
            log_facility_string = "log-facility kern"
        if log_facility == ns. dhcpd_mail:
            log_facility_string = "log-facility mail"
        if log_facility == ns.dhcpd_local7:
            log_facility_string = "log-facility local7"

        self.fp = open("dhcpd.conf.tmp", "w")
        self.fp.write("default-lease-time {dlt}\n"
                      "max-lease-time {mlt}\n"
                      "{lfs}\n".format(dlt=duration2secs(default_lease_time),
                                       mlt=duration2secs(max_lease_time),
                                       lfs=log_facility_string))

        sub_nets = cdb.num_instances(
            rsock,
            "/dhcp/SubNets/subNet")
        for i in range(0, sub_nets):
            cdb.cd(rsock, "/dhcp/SubNets/subNet[{index}]".format(index=i))
            self.do_subnet(rsock)

        shared_networks = cdb.num_instances(
            rsock,
            "/dhcp/SharedNetworks/sharedNetwork"
        )
        for i in range(0, shared_networks):
            sh_net = "/dhcp/SharedNetworks/sharedNetwork[{0}]".format(str(i))
            network_name = cdb.get(
                rsock,
                sh_net + "/name"
            )

            self.fp.write("shared-network {0} {{\n".format(str(network_name)))

            m = cdb.num_instances(
                rsock,
                sh_net + "/SubNets/subNet")
            for j in range(0, m):
                cdb.pushd(rsock, sh_net +
                          "/SubNets/subNet[{0}]".format(str(j)))
                self.do_subnet(rsock)
                cdb.popd(rsock)

            self.fp.write("}\n")
        self.fp.close()
        return cdb.close(rsock)
Exemple #2
0
 def cb_action(self, uinfo, name, kp, input, output):
     sub_points = []
     cds = socket.socket()
     cdb.connect(cds, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT)
     cdb.start_session(cds, cdb.OPERATIONAL)
     if input.all.exists() or len(input.server) == 0:
         num = cdb.num_instances(cds, SERVER_PATH)
         for i in range(num):
             sub_point = int(
                 cdb.get(cds,
                         "{}[{}]/subscription-id".format(SERVER_PATH, i)))
             sub_points.append(sub_point)
         cdb.end_session(cds)
         cdb.trigger_subscriptions(cds, sub_points)
         output.result = "Synchronized the configuration with all NETCONF servers"
     else:
         server_names = input.server
         for server_name in server_names:
             sub_point = int(
                 cdb.get(
                     cds, "{0}{{{1}}}/subscription-id".format(
                         SERVER_PATH, server_name)))
             sub_points.append(sub_point)
         cdb.end_session(cds)
         cdb.trigger_subscriptions(cds, sub_points)
         output.result = "Synchronized the configuration with {} NETCONF servers".format(
             ', '.join(server_names))
     cds.close()
Exemple #3
0
def handle_netconf_server_list(lock):
    crs = socket.socket()
    cdb.connect(crs, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT)
    cds = socket.socket()
    cdb.connect(cds, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT)
    css = socket.socket()
    cdb.connect(css, cdb.SUBSCRIPTION_SOCKET, CONFD_ADDR, confd.PORT)

    cdb.start_session2(crs, cdb.RUNNING, lock)
    cdb.start_session(cds, cdb.OPERATIONAL)
    num = cdb.num_instances(crs, SERVER_PATH)
    for i in range(num):
        sub_path = str(
            cdb.get(crs, "{}[{}]/subscription-path".format(SERVER_PATH, i)))
        sub_prio = int(
            cdb.get(crs, "{}[{}]/subscription-priority".format(SERVER_PATH,
                                                               i)))
        sid = cdb.subscribe2(css, cdb.SUB_RUNNING_TWOPHASE,
                             cdb.SUB_WANT_ABORT_ON_ABORT, sub_prio, 0,
                             sub_path)
        cdb.set_elem(cds, str(sid),
                     "{}[{}]/subscription-id".format(SERVER_PATH, i))
    cds.close()
    server_prio = int(cdb.get(crs, "{}/server-priority".format(CLIENT_PATH)))
    server_sid = cdb.subscribe(css, server_prio, 0, SERVER_PATH)
    crs.close()
    cdb.subscribe_done(css)
    return css, server_sid
Exemple #4
0
def read_db(cdbsock):
    log.debug("==> cdbsock.fileno()=%d" % cdbsock.fileno())
    cdb.start_session(cdbsock, cdb.RUNNING)
    cdb.set_namespace(cdbsock, root_ns.ns.hash)
    n = cdb.num_instances(cdbsock, "/root/NodeB/RFHead")
    for k, v in rfheads.items():
        v.children.clear()
    rfheads.clear()
    for i in range(n):
        key = int(cdb.get(cdbsock, "/root/NodeB/RFHead[%d]/dn" % i))
        read_head(cdbsock, key)

    cdb.end_session(cdbsock)
    log.debug("<== rfheads=%s" % _str_rfh(rfheads))
Exemple #5
0
def send_netconf_operation(op, sid, q):
    crs = socket.socket()
    cdb.connect(crs, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT)
    cds = socket.socket()
    cdb.connect(cds, cdb.DATA_SOCKET, CONFD_ADDR, confd.CONFD_PORT)
    cdb.start_session2(crs, cdb.RUNNING, 0)
    cdb.start_session(cds, cdb.OPERATIONAL)

    num = cdb.num_instances(crs, SERVER_PATH)

    for i in range(num):
        id = int(cdb.get(cds, "{}[{}]/subscription-id".format(SERVER_PATH, i)))
        if id == sid:
            break

    if id != sid:
        cds.close()
        crs.close()
        print("Subscription ID: {}".format(sid))
        return

    ipaddr = str(cdb.get(crs, "{}[{}]/remote-address".format(SERVER_PATH, i)))
    port = str(cdb.get(crs, "{}[{}]/remote-port".format(SERVER_PATH, i)))
    user = str(cdb.get(crs, "{}[{}]/username".format(SERVER_PATH, i)))
    passwd = str(cdb.get(crs, "{}[{}]/password".format(SERVER_PATH, i)))
    proc = subprocess.Popen(
        "netconf-console --user={} --password={} --host={} --port={} -".format(
            user, passwd, ipaddr, port),
        shell=True,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE)
    cmd = op
    output, errors = proc.communicate(input=cmd.encode('utf-8'))
    proc.stdout.close()
    proc.stderr.close()
    reply = output.decode()
    errstr = errors.decode()
    if reply.find('<rpc-error>') != -1 or errstr != "":
        q.put((reply, errstr))
    cds.close()
    crs.close()
Exemple #6
0
def read_head(cdbsock, headkey):
    log.debug("==> cdbsock.fileno()=%d headkey=%d" %
              (cdbsock.fileno(), headkey))
    hp = rfheads.get(headkey)

    if hp is None:
        hp = Rfhead()
        rfheads[headkey] = hp
        log.debug("Created new hp=%s" % hp)

    cdb.cd(cdbsock, "/root/NodeB/RFHead{%d}" % headkey)
    hp.sector_id = str(cdb.get(cdbsock, "SECTORID_ID"))
    hp.children.clear()
    log.debug("hp=%s", hp)
    n = cdb.num_instances(cdbsock, "Child")
    log.debug("number of child instances n=%d" % n)
    for i in range(n):
        dn = int(cdb.get(cdbsock, "Child[%d]/cdn" % i))
        childattr = str(cdb.get(cdbsock, "Child[%d]/childAttr" % i))
        hp.children[dn] = childattr

    log.debug("<== processed hp=%s" % hp)