def __init__(self, *args, **kwargs): super(SNAT, self).__init__(*args, **kwargs) wsgi = kwargs['wsgi'] wsgi.register(SNATRest, {nat_instance_name: self}) nat_settings = settings.load() self.wan_port = nat_settings['wan_port'] self.gateway = str(nat_settings['default_gateway']) self.nat_public_ip = str(nat_settings['nat_public_ip']) self.nat_private_ip = nat_settings['dhcp_gw_addr'] self.private_subnetwork = nat_settings['ip_network'] self.MAC_ON_WAN = nat_settings['MAC_ON_WAN'] self.MAC_ON_LAN = nat_settings['MAC_ON_LAN'] self.IDLE_TIME = 10 self.port_counter = -1 self.ports_pool = range(2000, 65536) pp = pprint.PrettyPrinter(indent=2) pp.pprint(nat_settings)
def nat_config_save(self, req, **kwargs): json_body = json.loads(req.body) save_dict = settings.load() if save_dict is None: save_dict = {} save_dict['wan_port'] = json_body.get('wanPort') save_dict['nat_public_ip'] = IPAddress(json_body.get('natPublicIp')) save_dict['default_gateway'] = IPAddress(json_body.get('defaultGateway')) net = json_body.get('natPrivateNetwork') + '/24' save_dict['ip_network'] = IPNetwork(net) save_dict['dhcp_gw_addr'] = IPNetwork(net)[1] save_dict['broadcast_addr'] = IPAddress('192.168.8.255') save_dict['dns_addr'] = IPAddress('8.8.8.8') save_dict['dhcp_hw_addr'] = '08:00:27:b8:0f:8d' save_dict['MAC_ON_WAN'] = '00:0e:c6:87:a6:fb' save_dict['MAC_ON_LAN'] = '00:0e:c6:87:a6:fa' if settings.save(save_dict): pp = pprint.PrettyPrinter(indent=2) pp.pprint(save_dict) return Response(status=200) else: return Response(status=400)
def nat_config_save(self, req, **kwargs): json_body = json.loads(req.body) save_dict = settings.load() if save_dict is None: save_dict = {} save_dict['wan_port'] = json_body.get('wanPort') save_dict['nat_public_ip'] = IPAddress(json_body.get('natPublicIp')) save_dict['default_gateway'] = IPAddress( json_body.get('defaultGateway')) net = json_body.get('natPrivateNetwork') + '/24' save_dict['ip_network'] = IPNetwork(net) save_dict['dhcp_gw_addr'] = IPNetwork(net)[1] save_dict['broadcast_addr'] = IPAddress('192.168.8.255') save_dict['dns_addr'] = IPAddress('8.8.8.8') save_dict['dhcp_hw_addr'] = '08:00:27:b8:0f:8d' save_dict['MAC_ON_WAN'] = '00:0e:c6:87:a6:fb' save_dict['MAC_ON_LAN'] = '00:0e:c6:87:a6:fa' if settings.save(save_dict): pp = pprint.PrettyPrinter(indent=2) pp.pprint(save_dict) return Response(status=200) else: return Response(status=400)
def _packet_in_handler(self, ev): msg = ev.msg datapath = msg.datapath ofproto = datapath.ofproto parser = datapath.ofproto_parser in_port = msg.match['in_port'] nat_settings = settings.load() wan_port = nat_settings['wan_port'] if in_port == wan_port: # self.logger.info("ignore packet coming from WAN port 3") # ignore packet coming from WAN port return pkt = packet.Packet(msg.data) eth = pkt.get_protocols(ethernet.ethernet)[0] if eth.ethertype == ether_types.ETH_TYPE_LLDP: # ignore lldp packet return dst = eth.dst src = eth.src dpid = datapath.id self.mac_to_port.setdefault(dpid, {}) # self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port) # learn a mac address to avoid FLOOD next time. self.mac_to_port[dpid][src] = in_port if dst in self.mac_to_port[dpid]: out_port = self.mac_to_port[dpid][dst] else: out_port = ofproto.OFPP_FLOOD actions = [parser.OFPActionOutput(out_port)] # install a flow to avoid packet_in next time if out_port != ofproto.OFPP_FLOOD: match = parser.OFPMatch(in_port=in_port, eth_dst=dst) # verify if we have a valid buffer_id, if yes avoid to send both # flow_mod & packet_out if msg.buffer_id != ofproto.OFP_NO_BUFFER: ofp_helper.add_flow(datapath, 1, match, actions, msg.buffer_id) return else: ofp_helper.add_flow(datapath, 1, match, actions) data = None if msg.buffer_id == ofproto.OFP_NO_BUFFER: data = msg.data out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port, actions=actions, data=data) datapath.send_msg(out)
def __init__(self, *args, **kwargs): super(SimpleDHCPServer, self).__init__(*args, **kwargs) self.dhcp_msg_type_code = { 1: 'DHCP_DISCOVER', 2: 'DHCP_OFFER', 3: 'DHCP_REQUEST', 4: 'DHCP_DECLINE', 5: 'DHCP_ACK', 6: 'DHCP_NAK', 7: 'DHCP_RELEASE', 8: 'DHCP_INFORM', } dhcp_settings = settings.load() self.dhcp_addr = dhcp_settings['dhcp_gw_addr'] self.gw_addr = dhcp_settings['dhcp_gw_addr'] self.broadcast_addr = dhcp_settings['broadcast_addr'] self.ip_network = dhcp_settings['ip_network'] self.ip_pool_list = list(self.ip_network) self.dns_addr = dhcp_settings['dns_addr'] self.dhcp_hw_addr = dhcp_settings['dhcp_hw_addr'] self.mac_to_client_ip = {} assert self.dhcp_addr in self.ip_pool_list assert self.gw_addr in self.ip_pool_list # self.ip_pool_list.remove(self.dhcp_addr) self.ip_pool_list.remove(self.gw_addr) self.ip_pool_list.remove(self.broadcast_addr) self.ip_pool_list.remove(self.ip_network[0])