1 /*! \file vlan_example.py
7 from select
import select
11 from sys
import version_info
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 if version_info >= (3,0,0):
48 for i
in range(0, size - 1):
49 if self.m_vlan_table[i].vlan_exists ==
True :
50 res =
"VLAN: " + str(i) +
" is "
51 if self.m_vlan_table[i].staticVlan ==
True :
57 for i
in xrange(0, size - 1):
58 if self.m_vlan_table[i].vlan_exists ==
True :
59 res =
"VLAN: " + str(i) +
" is "
60 if self.m_vlan_table[i].staticVlan ==
True :
66 def vlan_table_validate(self):
68 if version_info >= (3,0,0):
69 for vlan_num
in range(0, size - 1) :
70 if self.m_vlan_table[vlan_num].exists ==
True :
71 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
72 if ret == OPEN_E_NONE :
73 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
75 self.m_vlan_table[vlan_num].vlan_exists =
False;
76 self.m_vlan_table[vlan_num].staticVlan =
False;
78 for vlan_num
in xrange(0, size - 1) :
79 if self.m_vlan_table[vlan_num].exists ==
True :
80 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
81 if ret == OPEN_E_NONE :
82 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
84 self.m_vlan_table[vlan_num].vlan_exists =
False;
85 self.m_vlan_table[vlan_num].staticVlan =
False;
87 def vlan_table_create(self):
89 self.m_vlan_table = []
91 open_event = OpEN.openapiEventList_t()
92 OpEN.openapiEventListClear(open_event)
93 OpEN.openapiEventSet(open_event, OpEN.OPEN_EVENT_VLAN)
95 ret = OpEN.openapiEventRegister(self.m_client, open_event)
96 if ret != OpEN.OPEN_E_NONE :
97 print(
"Failed to register for OPEN_EVENT_VLAN events.\n")
99 print(
"Successfully registered for OPEN_EVENT_VLAN events.\n")
102 if version_info >= (3,0,0):
103 for vlan_num
in range(0, size):
105 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
106 if ret == OpEN.OPEN_E_NONE :
107 vlan.vlan_exists =
True
108 vlan.staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
110 vlan.vlan_exists =
False
111 vlan.staticVlan =
False
112 self.m_vlan_table.append(vlan)
114 for vlan_num
in xrange(0, size):
116 ret = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
117 if ret == OpEN.OPEN_E_NONE :
118 vlan.vlan_exists =
True
119 vlan.staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
121 vlan.vlan_exists =
False
122 vlan.staticVlan =
False
123 self.m_vlan_table.append(vlan)
127 self.m_vlan_table[vlan_num].vlan_exists =
True
128 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
129 vlan_num_p = OpEN.new_uint32_tp()
130 ret = OpEN.openapiVlanNextGet(self.m_client, vlan_num, vlan_num_p)
131 if ret == OpEN.OPEN_E_NONE:
132 vlan_num = OpEN.uint32_tp_value(vlan_num_p)
135 OpEN.delete_uint32_tp(vlan_num_p)
137 def vlan_table_monitor(self, duration):
138 change_pending_event = OpEN.openapiEventList_t()
139 OpEN.openapiEventListClear(change_pending_event)
140 purge_event = OpEN.openapiEventList_t()
141 OpEN.openapiEventListClear(purge_event)
143 end_time = time() + duration
144 notify_fd = OpEN.openapiClientNotifySocketFDGet(self.m_client)
146 print(
"Invalid notify_fd retrieved")
148 fcntl.fcntl(notify_fd, fcntl.F_SETFL, os.O_NONBLOCK)
149 print(
"notify_fd is %d\n" % notify_fd)
153 while time() < end_time :
154 rr, wr, er = select(rd_fds, wr_fds, ex_fds, 5)
159 s = os.read(notify_fd, 1024)
160 except os.error
as e:
161 if e.errno == errno.EWOULDBLOCK:
167 ret = OpEN.openapiPendingEventsGet(self.m_client, change_pending_event.m_open_event, purge_event.m_open_event)
168 if ret == OpEN.OPEN_E_NONE :
169 if purge_event.is_set(OpEN.OPEN_EVENT_VLAN) ==
True :
170 print(
"Got Purge event for OPEN_EVENT_VLAN")
171 vlan_table_validate()
172 if change_pending_event.is_set(OpEN.OPEN_EVENT_VLAN) ==
True :
173 print(
"Got Change Pending event for OPEN_EVENT_VLAN")
176 vlan_num_p = OpEN.new_uint32_tp()
177 delete_pending_p = OpEN.new_uint32_tp()
179 ret = OpEN.openapiVlanNextChangedGet(self.m_client, vlan_num, vlan_num_p, delete_pending_p)
180 if ret == OpEN.OPEN_E_NONE :
181 vlan_num = OpEN.uint32_tp_value(vlan_num_p)
182 delete_pending = OpEN.uint32_tp_value(delete_pending_p)
183 if delete_pending != 0 :
184 print(
"Deleting VLAN ID: %d" % vlan_num)
185 self.m_vlan_table[vlan_num].vlan_exists =
False
186 self.m_vlan_table[vlan_num].staticVlan =
False
188 print(
"Change event received for VLAN ID: %d" % vlan_num)
189 ret2 = OpEN.openapiVlanCreatedCheck(self.m_client, vlan_num)
190 if ret2 == OpEN.OPEN_E_NONE :
191 self.m_vlan_table[vlan_num].vlan_exists =
True
192 self.m_vlan_table[vlan_num].staticVlan = OpEN.openapiVlanIsStatic(self.m_client, vlan_num)
194 self.m_vlan_table[vlan_num].vlan_exists =
False
195 self.m_vlan_table[vlan_num].staticVlan =
False
196 self.vlan_status_show()
199 OpEN.delete_uint32_tp(vlan_num_p)
200 OpEN.delete_uint32_tp(delete_pending_p)
203 ret = open.connect(
"vlan_example")
204 if ret == OpEN.OPEN_E_NONE :
205 open.getNetworkOSVersion()
207 client = open.get_client()
208 vlanExample = VlanExample(client)
209 vlanExample.vlan_table_create()
210 vlanExample.vlan_status_show()
211 vlanExample.vlan_table_monitor(60)
212 vlanExample.vlan_status_show()
215 print(
"Unable to connect")