Creating Sockets Using Python Scripts

Creating a socket in a Python script defaults to the management interface. You can change the VR when the socket is create by using the following example:

Example: Binding the socket to VR-Default (258) for an UDP socket:
import IN
from socket import *
udp_sock = socket(AF_INET, SOCK_DGRAM)
udp_sock.setsockopt(SOL_SOCKET,IN.SO_BINDTODEVICE,"vrf_258")

.
.
.
# your program here
.
.
.

udp_sock.close()
Note

Note

Do not use os.system('echo 2 > /proc/self/ns_id‘) to do this because os.system() spawns a subprocess. The subprocess will switch to vr-default, and then exit. The calling process will still be using the same VR as before.

Using VRF_258 maps the socket to VR-Default.

In cases where the socket needs to be mapped to a user VR, include the followiung API in the script to get the VR name in kernel.

Example: API to find the VRF_name for a given user VR.
import exsh 
def vrfNameFromvrName(vrName): 
  lst = exsh.clicmd("debug cli show namespace vrId | begin namespaceEntry", True) 
  lines = lst.split('\n') 
  # ignore first two lines 
  lines.pop(0) 
  lines.pop(0) 
  vrfName = None 
  for line in lines: 
    if line == "": 
    break 
  name, id, peer = line.split() 
  if name == vrName: 
    vrfName = "vrf_" + str(256 + (int(id))) 
    break 
return vrfName