MCPcopy Create free account
hub / github.com/FDio/vpp / connect

Method connect

src/vpp-api/python/vpp_papi/vpp_papi_async.py:420–474  ·  view source on GitHub ↗

Attach to VPP.

(self, name, event_queue)

Source from the content-addressed store, hash-verified

418 return 0
419
420 async def connect(self, name, event_queue):
421 """Attach to VPP."""
422 try:
423 reader, writer = await asyncio.open_unix_connection(self.server_address)
424 except (PermissionError, FileNotFoundError):
425 return -1
426 self.reader = reader
427 self.writer = writer
428
429 # Initialise sockclnt_create
430 sockclnt_create = self.messages["sockclnt_create"]
431 sockclnt_create_reply = self.messages["sockclnt_create_reply"]
432
433 args = {"_vl_msg_id": 15, "name": name, "context": 124}
434 b = sockclnt_create.pack(args)
435 # Send header
436 hdr = self.header_struct.pack(0, len(b), 0)
437 writer.write(hdr)
438 writer.write(b)
439 await writer.drain()
440 hdr = await reader.readexactly(16)
441 _, hdrlen, _ = self.header_struct.unpack(hdr) # If at head of message
442 msg = await reader.readexactly(hdrlen)
443 header2 = VPPType("header", [["u16", "msgid"], ["u32", "client_index"]])
444 hdr, _ = header2.unpack(msg, 0)
445 if hdr.msgid != 16:
446 # TODO: Add first numeric argument.
447 raise IOError("Invalid reply message")
448
449 r, length = sockclnt_create_reply.unpack(msg)
450 self.socket_index = r.index
451 for m in r.message_table:
452 n = m.name
453 self.message_table[n] = m.index
454 # Find the maximum index of the message table
455 self.vpp_dictionary_maxid = max(self.message_table.values() or [0])
456
457 # self.worker_task = asyncio.create_task(self.message_handler(event_queue))
458 requests = {}
459 self.queue_task = asyncio.create_task(self.queue_worker(requests))
460 self.socket_task = asyncio.create_task(
461 self.socket_reader(requests, event_queue)
462 )
463
464 # Register the functions we have (memclnt.json)
465 await self.get_api_definitions()
466
467 self._register_functions()
468
469 # Initialise control ping
470 crc = self.messages["control_ping"].crc
471 self.control_ping_index = self.get_msg_index(("control_ping" + "_" + crc[2:]))
472 self.control_ping_msgdef = self.messages["control_ping"]
473
474 return 0
475
476 async def disconnect(self):
477 """Detach from VPP."""

Callers

nothing calls this directly

Calls 10

unpackMethod · 0.95
queue_workerMethod · 0.95
socket_readerMethod · 0.95
get_api_definitionsMethod · 0.95
_register_functionsMethod · 0.95
get_msg_indexMethod · 0.95
VPPTypeClass · 0.85
packMethod · 0.45
writeMethod · 0.45
unpackMethod · 0.45

Tested by

no test coverage detected