1 /*! \file vlan_example.py
7 from select
import select
36 self.m_vlan_exists =
False
37 self.m_staticVlan =
False
40 def __init__(self, client) :
41 self.m_client = client
42 self.m_vlan_table = []
44 def vlan_status_show(self):
45 print "\n\nThe following VLAN IDs are in the switch's VLAN database:\n"
47 for i
in xrange(0, size - 1):
48 if self.m_vlan_table[i].vlan_exists ==
True :
49 res =
"VLAN: " + str(i) +
" is "
50 if self.m_vlan_table[i].staticVlan ==
True :
56 def vlan_table_validate(self):
58 for vlan_num
in xrange(0, size - 1) :
59 if self.m_vlan_table[vlan_num].exists ==
True :
60 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
61 if ret == OPEN_E_NONE :
62 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
64 self.m_vlan_table[vlan_num].vlan_exists =
False;
65 self.m_vlan_table[vlan_num].staticVlan =
False;
67 def vlan_table_create(self):
69 self.m_vlan_table = []
71 open_event = OpEN.openapiEventList_t()
72 OpEN.openapiEventListClear(open_event)
73 OpEN.openapiEventSet(open_event, OpEN.OPEN_EVENT_VLAN)
75 ret = OpEN.openapiEventRegister(self.m_client, open_event)
76 if ret != OpEN.OPEN_E_NONE :
77 print "Failed to register for OPEN_EVENT_VLAN events.\n"
79 print "Successfully registered for OPEN_EVENT_VLAN events.\n"
82 for vlan_num
in xrange(0, size):
84 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
85 if ret == OpEN.OPEN_E_NONE :
86 vlan.vlan_exists =
True
87 vlan.staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
89 vlan.vlan_exists =
False
90 vlan.staticVlan =
False
91 self.m_vlan_table.append(vlan)
95 self.m_vlan_table[vlan_num].vlan_exists =
True
96 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
97 vlan_num_p = OpEN.new_uint32_tp()
98 ret = OpEN.openapiVlanNextGet(self.m_client, vlan_num, vlan_num_p)
99 if ret == OpEN.OPEN_E_NONE:
100 vlan_num = OpEN.uint32_tp_value(vlan_num_p)
103 OpEN.delete_uint32_tp(vlan_num_p)
105 def vlan_table_monitor(self, duration):
106 change_pending_event = OpEN.openapiEventList_t()
107 OpEN.openapiEventListClear(change_pending_event)
108 purge_event = OpEN.openapiEventList_t()
109 OpEN.openapiEventListClear(purge_event)
111 end_time = time() + duration
112 notify_fd = OpEN.openapiClientNotifySocketFDGet(self.m_client)
114 print "Invalid notify_fd retrieved"
116 fcntl.fcntl(notify_fd, fcntl.F_SETFL, os.O_NONBLOCK)
117 print "notify_fd is %d\n" % notify_fd
121 while time() < end_time :
122 rr, wr, er = select(rd_fds, wr_fds, ex_fds, 5)
127 s = os.read(notify_fd, 1024)
129 if e.errno == errno.EWOULDBLOCK:
135 ret = OpEN.openapiPendingEventsGet(self.m_client, change_pending_event.m_open_event, purge_event.m_open_event)
136 if ret == OpEN.OPEN_E_NONE :
137 if purge_event.is_set(OpEN.OPEN_EVENT_VLAN) ==
True :
138 print "Got Purge event for OPEN_EVENT_VLAN"
139 vlan_table_validate()
140 if change_pending_event.is_set(OpEN.OPEN_EVENT_VLAN) ==
True :
141 print "Got Change Pending event for OPEN_EVENT_VLAN"
144 vlan_num_p = OpEN.new_uint32_tp()
145 delete_pending_p = OpEN.new_uint32_tp()
147 ret = OpEN.openapiVlanNextChangedGet(self.m_client, vlan_num, vlan_num_p, delete_pending_p)
148 if ret == OpEN.OPEN_E_NONE :
149 vlan_num = OpEN.uint32_tp_value(vlan_num_p)
150 delete_pending = OpEN.uint32_tp_value(delete_pending_p)
151 if delete_pending != 0 :
152 print "Deleting VLAN ID: %d" % vlan_num
153 self.m_vlan_table[vlan_num].vlan_exists =
False
154 self.m_vlan_table[vlan_num].staticVlan =
False
156 print "Change event received for VLAN ID: %d" % vlan_num
157 ret2 = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
158 if ret2 == OpEN.OPEN_E_NONE :
159 self.m_vlan_table[vlan_num].vlan_exists =
True
160 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
162 self.m_vlan_table[vlan_num].vlan_exists =
False
163 self.m_vlan_table[vlan_num].staticVlan =
False
164 self.vlan_status_show()
167 OpEN.delete_uint32_tp(vlan_num_p)
168 OpEN.delete_uint32_tp(delete_pending_p)
171 ret = open.connect(
"vlan_example")
172 if ret == OpEN.OPEN_E_NONE :
173 open.getNetworkOSVersion()
175 client = open.get_client()
176 vlanExample = VlanExample(client)
177 vlanExample.vlan_table_create()
178 vlanExample.vlan_status_show()
179 vlanExample.vlan_table_monitor(60)
180 vlanExample.vlan_status_show()
183 print "Unable to connect"