forked from martin-ger/esp_wifi_repeater
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
master branch with liblwip_open_napt
- Loading branch information
Martin Ger
committed
Aug 15, 2017
1 parent
d31bcfc
commit db7139a
Showing
8 changed files
with
4,704 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
#ifndef __DHCPS_H__ | ||
#define __DHCPS_H__ | ||
|
||
#define USE_DNS | ||
|
||
typedef struct dhcps_state{ | ||
sint16_t state; | ||
} dhcps_state; | ||
|
||
// ����dhcpclient�Զ����һ��DHCP msg�ṹ�� | ||
typedef struct dhcps_msg { | ||
uint8_t op, htype, hlen, hops; | ||
uint8_t xid[4]; | ||
uint16_t secs, flags; | ||
uint8_t ciaddr[4]; | ||
uint8_t yiaddr[4]; | ||
uint8_t siaddr[4]; | ||
uint8_t giaddr[4]; | ||
uint8_t chaddr[16]; | ||
uint8_t sname[64]; | ||
uint8_t file[128]; | ||
uint8_t options[312]; | ||
}dhcps_msg; | ||
|
||
#ifndef LWIP_OPEN_SRC | ||
struct dhcps_lease { | ||
bool enable; | ||
struct ip_addr start_ip; | ||
struct ip_addr end_ip; | ||
}; | ||
|
||
enum dhcps_offer_option{ | ||
OFFER_START = 0x00, | ||
OFFER_ROUTER = 0x01, | ||
OFFER_END | ||
}; | ||
#endif | ||
|
||
struct dhcps_pool{ | ||
struct ip_addr ip; | ||
uint8 mac[6]; | ||
uint32 lease_timer; | ||
}; | ||
|
||
typedef struct _list_node{ | ||
void *pnode; | ||
struct _list_node *pnext; | ||
}list_node; | ||
|
||
extern uint32 dhcps_lease_time; | ||
#define DHCPS_LEASE_TIMER dhcps_lease_time //0x05A0 | ||
#define DHCPS_MAX_LEASE 0x64 | ||
#define BOOTP_BROADCAST 0x8000 | ||
|
||
#define DHCP_REQUEST 1 | ||
#define DHCP_REPLY 2 | ||
#define DHCP_HTYPE_ETHERNET 1 | ||
#define DHCP_HLEN_ETHERNET 6 | ||
#define DHCP_MSG_LEN 236 | ||
|
||
#define DHCPS_SERVER_PORT 67 | ||
#define DHCPS_CLIENT_PORT 68 | ||
|
||
#define DHCPDISCOVER 1 | ||
#define DHCPOFFER 2 | ||
#define DHCPREQUEST 3 | ||
#define DHCPDECLINE 4 | ||
#define DHCPACK 5 | ||
#define DHCPNAK 6 | ||
#define DHCPRELEASE 7 | ||
|
||
#define DHCP_OPTION_SUBNET_MASK 1 | ||
#define DHCP_OPTION_ROUTER 3 | ||
#define DHCP_OPTION_DNS_SERVER 6 | ||
#define DHCP_OPTION_REQ_IPADDR 50 | ||
#define DHCP_OPTION_LEASE_TIME 51 | ||
#define DHCP_OPTION_MSG_TYPE 53 | ||
#define DHCP_OPTION_SERVER_ID 54 | ||
#define DHCP_OPTION_INTERFACE_MTU 26 | ||
#define DHCP_OPTION_PERFORM_ROUTER_DISCOVERY 31 | ||
#define DHCP_OPTION_BROADCAST_ADDRESS 28 | ||
#define DHCP_OPTION_REQ_LIST 55 | ||
#define DHCP_OPTION_END 255 | ||
|
||
//#define USE_CLASS_B_NET 1 | ||
#define DHCPS_DEBUG 0 | ||
#define MAX_STATION_NUM 8 | ||
|
||
#define DHCPS_STATE_OFFER 1 | ||
#define DHCPS_STATE_DECLINE 2 | ||
#define DHCPS_STATE_ACK 3 | ||
#define DHCPS_STATE_NAK 4 | ||
#define DHCPS_STATE_IDLE 5 | ||
#define DHCPS_STATE_RELEASE 6 | ||
|
||
#define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0) | ||
|
||
void dhcps_start(struct ip_info *info); | ||
void dhcps_stop(void); | ||
|
||
void dhcps_set_DNS(struct ip_addr *dns_ip) ICACHE_FLASH_ATTR; | ||
struct dhcps_pool *dhcps_get_mapping(uint16_t no) ICACHE_FLASH_ATTR; | ||
void dhcps_set_mapping(struct ip_addr *addr, uint8 *mac, uint32 lease_time) ICACHE_FLASH_ATTR; | ||
|
||
#endif | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
#ifndef __LWIP_NAPT_H__ | ||
#define __LWIP_NAPT_H__ | ||
|
||
#include "lwip/opt.h" | ||
|
||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif | ||
|
||
#if IP_FORWARD | ||
#if IP_NAPT | ||
|
||
/* Default size of the tables used for NAPT */ | ||
#define IP_NAPT_MAX 512 | ||
#define IP_PORTMAP_MAX 32 | ||
|
||
/* Timeouts in sec for the various protocol types */ | ||
#define IP_NAPT_TIMEOUT_MS_TCP (30*60*1000) | ||
#define IP_NAPT_TIMEOUT_MS_TCP_DISCON (20*1000) | ||
#define IP_NAPT_TIMEOUT_MS_UDP (2*1000) | ||
#define IP_NAPT_TIMEOUT_MS_ICMP (2*1000) | ||
|
||
#define IP_NAPT_PORT_RANGE_START 49152 | ||
#define IP_NAPT_PORT_RANGE_END 61439 | ||
|
||
struct napt_table { | ||
u32_t last; | ||
u32_t src; | ||
u32_t dest; | ||
u16_t sport; | ||
u16_t dport; | ||
u16_t mport; | ||
u8_t proto; | ||
u8_t fin1 : 1; | ||
u8_t fin2 : 1; | ||
u8_t finack1 : 1; | ||
u8_t finack2 : 1; | ||
u8_t synack : 1; | ||
u8_t rst : 1; | ||
u16_t next, prev; | ||
}; | ||
|
||
struct portmap_table { | ||
u32_t maddr; | ||
u32_t daddr; | ||
u16_t mport; | ||
u16_t dport; | ||
u8_t proto; | ||
u8 valid; | ||
}; | ||
|
||
extern struct portmap_table *ip_portmap_table; | ||
|
||
/** | ||
* Allocates and initializes the NAPT tables. | ||
* | ||
* @param max_nat max number of enties in the NAPT table (use IP_NAPT_MAX if in doubt) | ||
* @param max_portmap max number of enties in the NAPT table (use IP_PORTMAP_MAX if in doubt) | ||
*/ | ||
void ICACHE_FLASH_ATTR | ||
ip_napt_init(uint16_t max_nat, uint8_t max_portmap); | ||
|
||
|
||
/** | ||
* Enable/Disable NAPT for a specified interface. | ||
* | ||
* @param addr ip address of the interface | ||
* @param enable non-zero to enable NAPT, or 0 to disable. | ||
*/ | ||
void ICACHE_FLASH_ATTR | ||
ip_napt_enable(u32_t addr, int enable); | ||
|
||
|
||
/** | ||
* Enable/Disable NAPT for a specified interface. | ||
* | ||
* @param netif number of the interface | ||
* @param enable non-zero to enable NAPT, or 0 to disable. | ||
*/ | ||
void ICACHE_FLASH_ATTR | ||
ip_napt_enable_no(u8_t number, int enable); | ||
|
||
|
||
/** | ||
* Register port mapping on the external interface to internal interface. | ||
* When the same port mapping is registered again, the old mapping is overwritten. | ||
* In this implementation, only 1 unique port mapping can be defined for each target address/port. | ||
* | ||
* @param proto target protocol | ||
* @param maddr ip address of the external interface | ||
* @param mport mapped port on the external interface, in host byte order. | ||
* @param daddr destination ip address | ||
* @param dport destination port, in host byte order. | ||
*/ | ||
u8_t ICACHE_FLASH_ATTR | ||
ip_portmap_add(u8_t proto, u32_t maddr, u16_t mport, u32_t daddr, u16_t dport); | ||
|
||
|
||
/** | ||
* Unregister port mapping on the external interface to internal interface. | ||
* | ||
* @param proto target protocol | ||
* @param maddr ip address of the external interface | ||
*/ | ||
u8_t ICACHE_FLASH_ATTR | ||
ip_portmap_remove(u8_t proto, u16_t mport); | ||
|
||
#endif /* IP_NAPT */ | ||
#endif /* IP_FORWARD */ | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#endif /* __LWIP_NAPT_H__ */ |
Oops, something went wrong.