|
40 | 40 |
|
41 | 41 | from pyretic.backend.comm import *
|
42 | 42 |
|
43 |
| - |
44 | 43 | def inport_value_hack(outport):
|
45 | 44 | if outport > 1:
|
46 | 45 | return 1
|
@@ -135,120 +134,11 @@ def __init__(self,show_traces=False,debug_packet_in=False,ip='127.0.0.1',port=BA
|
135 | 134 | self.backend_channel = BackendChannel(ip, port, self)
|
136 | 135 | self.adjacency = {} # From Link to time.time() stamp
|
137 | 136 |
|
138 |
| - def packet_from_network(self, switch, inport, raw): |
139 |
| - h = {} |
140 |
| - h["switch"] = switch |
141 |
| - h["inport"] = inport |
142 |
| - |
143 |
| - p = packetlib.ethernet(raw) |
144 |
| - h["header_len"] = p.hdr_len |
145 |
| - h["payload_len"] = p.payload_len |
146 |
| - h["srcmac"] = p.src.toRaw() |
147 |
| - h["dstmac"] = p.dst.toRaw() |
148 |
| - h["ethtype"] = p.type |
149 |
| - |
150 |
| - p = p.next |
151 |
| - if isinstance(p, packetlib.vlan): |
152 |
| - h['vlan_id'] = p.id |
153 |
| - h['vlan_pcp'] = p.pcp |
154 |
| - h["ethtype"] = p.eth_type |
155 |
| - p = p.next |
156 |
| - |
157 |
| - if isinstance(p, packetlib.ipv4): |
158 |
| - h["srcip"] = p.srcip.toRaw() |
159 |
| - h["dstip"] = p.dstip.toRaw() |
160 |
| - h["protocol"] = p.protocol |
161 |
| - h["tos"] = p.tos |
162 |
| - p = p.next |
163 |
| - |
164 |
| - if isinstance(p, packetlib.udp) or isinstance(p, packetlib.tcp): |
165 |
| - h["srcport"] = p.srcport |
166 |
| - h["dstport"] = p.dstport |
167 |
| - elif isinstance(p, packetlib.icmp): |
168 |
| - h["srcport"] = p.type |
169 |
| - h["dstport"] = p.code |
170 |
| - elif isinstance(p, packetlib.arp): |
171 |
| - if p.opcode <= 255: |
172 |
| - h["ethtype"] = packetlib.ethernet.ARP_TYPE |
173 |
| - h["protocol"] = p.opcode |
174 |
| - h["srcip"] = p.protosrc.toRaw() |
175 |
| - h["dstip"] = p.protodst.toRaw() |
176 |
| - |
177 |
| - h["raw"] = raw |
178 |
| - return h |
179 |
| - |
180 |
| - def make_arp(self, packet): |
181 |
| - p = packetlib.ethernet() |
182 |
| - p.src = packet["srcmac"] |
183 |
| - p.dst = packet["dstmac"] |
184 |
| - |
185 |
| - p.type = packetlib.ethernet.ARP_TYPE |
186 |
| - p.next = packetlib.arp(prev=p) |
187 |
| - |
188 |
| - p.next.hwsrc = packet["srcmac"] |
189 |
| - p.next.hwdst = packet["dstmac"] |
190 |
| - p.next.protosrc = packet["srcip"] |
191 |
| - p.next.protodst = packet["dstip"] |
192 |
| - p.next.opcode = packet['protocol'] |
193 |
| - |
194 |
| - return p |
195 |
| - |
| 137 | + def packet_from_network(self, **kwargs): |
| 138 | + return kwargs |
196 | 139 |
|
197 | 140 | def packet_to_network(self, packet):
|
198 |
| - if len(packet["raw"]) == 0: |
199 |
| - if packet["ethtype"] == packetlib.ethernet.ARP_TYPE: |
200 |
| - p_begin = p = self.make_arp(packet) |
201 |
| - else: # BLANK PACKET FOR NOW - MAY NEED TO SUPPORT OTHER PACKETS LATER |
202 |
| - p_begin = p = packetlib.ethernet() |
203 |
| - else: |
204 |
| - p_begin = p = packetlib.ethernet(packet["raw"]) |
205 |
| - |
206 |
| - # ETHERNET PACKET IS OUTERMOST |
207 |
| - p.src = packet["srcmac"] |
208 |
| - p.dst = packet["dstmac"] |
209 |
| - |
210 |
| - if 'vlan_id' in packet: |
211 |
| - if isinstance(p.next, packetlib.vlan): |
212 |
| - p = p.next |
213 |
| - else: |
214 |
| - # Make a vlan header |
215 |
| - old_eth_type = p.type |
216 |
| - p.type = 0x8100 |
217 |
| - p.next = packetlib.vlan(next=p.next) |
218 |
| - p = p.next |
219 |
| - p.eth_type = old_eth_type |
220 |
| - p.id = packet['vlan_id'] |
221 |
| - p.pcp = packet['vlan_pcp'] |
222 |
| - else: |
223 |
| - if isinstance(p.next, packetlib.vlan): |
224 |
| - p.type = p.next.eth_type # Restore encapsulated eth type |
225 |
| - p.next = p.next.next # Remove vlan from header |
226 |
| - |
227 |
| - # GET PACKET INSIDE ETHERNET/VLAN |
228 |
| - p = p.next |
229 |
| - if isinstance(p, packetlib.ipv4): |
230 |
| - p.srcip = packet["srcip"] |
231 |
| - p.dstip = packet["dstip"] |
232 |
| - p.protocol = packet["protocol"] |
233 |
| - p.tos = packet["tos"] |
234 |
| - |
235 |
| - p = p.next |
236 |
| - if isinstance(p, packetlib.udp) or isinstance(p, packetlib.tcp): |
237 |
| - p.srcport = packet["srcport"] |
238 |
| - p.dstport = packet["dstport"] |
239 |
| - elif isinstance(p, packetlib.icmp): |
240 |
| - p.type = packet["srcport"] |
241 |
| - p.code = packet["dstport"] |
242 |
| - |
243 |
| - elif isinstance(p, packetlib.arp): |
244 |
| - if 'vlan_id' in packet: |
245 |
| - p.opcode = packet["protocol"] |
246 |
| - p.protosrc = packet["srcip"] |
247 |
| - p.protodst = packet["dstip"] |
248 |
| - else: |
249 |
| - p_begin = self.make_arp(packet) |
250 |
| - |
251 |
| - return p_begin.pack() |
| 141 | + return packet['raw'] |
252 | 142 |
|
253 | 143 | def _handle_ComponentRegistered (self, event):
|
254 | 144 | if event.name == "openflow":
|
@@ -759,7 +649,7 @@ def _handle_PacketIn(self, event):
|
759 | 649 | print "dpid\t%s" % event.dpid
|
760 | 650 | print
|
761 | 651 |
|
762 |
| - received = self.packet_from_network(event.dpid, event.ofp.in_port, event.data) |
| 652 | + received = self.packet_from_network(switch=event.dpid, inport=event.ofp.in_port, raw=event.data) |
763 | 653 | self.send_to_pyretic(['packet',received])
|
764 | 654 |
|
765 | 655 |
|
|
0 commit comments