Merge remote-tracking branch 'bernard/master'
This commit is contained in:
commit
72298bac32
@ -234,7 +234,11 @@ int fd_is_open(const char *pathname)
|
||||
mountpath = fullpath + strlen(fs->path);
|
||||
|
||||
dfs_lock();
|
||||
#ifdef DFS_USING_STDIO
|
||||
for (index = 3; index < DFS_FD_MAX+3; index++)
|
||||
#else
|
||||
for (index = 0; index < DFS_FD_MAX; index++)
|
||||
#endif
|
||||
{
|
||||
fd = &(fd_table[index]);
|
||||
if (fd->fs == RT_NULL)
|
||||
|
@ -100,13 +100,13 @@ rt_size_t rt_ringbuffer_put_force(struct rt_ringbuffer *rb,
|
||||
const rt_uint8_t *ptr,
|
||||
rt_uint16_t length)
|
||||
{
|
||||
enum rt_ringbuffer_state old_state;
|
||||
rt_uint16_t space_length;
|
||||
|
||||
RT_ASSERT(rb != RT_NULL);
|
||||
|
||||
old_state = rt_ringbuffer_status(rb);
|
||||
space_length = rt_ringbuffer_space_len(rb);
|
||||
|
||||
if (length > rb->buffer_size)
|
||||
if (length > space_length)
|
||||
length = rb->buffer_size;
|
||||
|
||||
if (rb->buffer_size - rb->write_index > length)
|
||||
@ -117,7 +117,7 @@ rt_size_t rt_ringbuffer_put_force(struct rt_ringbuffer *rb,
|
||||
* length of data in current mirror */
|
||||
rb->write_index += length;
|
||||
|
||||
if (old_state == RT_RINGBUFFER_FULL)
|
||||
if (length > space_length)
|
||||
rb->read_index = rb->write_index;
|
||||
|
||||
return length;
|
||||
@ -134,7 +134,7 @@ rt_size_t rt_ringbuffer_put_force(struct rt_ringbuffer *rb,
|
||||
rb->write_mirror = ~rb->write_mirror;
|
||||
rb->write_index = length - (rb->buffer_size - rb->write_index);
|
||||
|
||||
if (old_state == RT_RINGBUFFER_FULL)
|
||||
if (length > space_length)
|
||||
{
|
||||
rb->read_mirror = ~rb->read_mirror;
|
||||
rb->read_index = rb->write_index;
|
||||
|
@ -312,6 +312,11 @@ ip_input(struct pbuf *p, struct netif *inp)
|
||||
int check_ip_src=1;
|
||||
#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */
|
||||
|
||||
#if IP_NAT
|
||||
extern u8_t ip_nat_input(struct pbuf *p);
|
||||
extern u8_t ip_nat_out(struct pbuf *p);
|
||||
#endif
|
||||
|
||||
IP_STATS_INC(ip.recv);
|
||||
snmp_inc_ipinreceives();
|
||||
|
||||
@ -487,15 +492,30 @@ ip_input(struct pbuf *p, struct netif *inp)
|
||||
|
||||
/* packet not for us? */
|
||||
if (netif == NULL) {
|
||||
#if IP_FORWARD || IP_NAT
|
||||
u8_t taken = 0;
|
||||
#endif /* IP_FORWARD || IP_NAT */
|
||||
/* packet not for us, route or discard */
|
||||
LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n"));
|
||||
#if IP_FORWARD
|
||||
#if IP_FORWARD || IP_NAT
|
||||
/* non-broadcast packet? */
|
||||
if (!ip_addr_isbroadcast(¤t_iphdr_dest, inp)) {
|
||||
/* try to forward IP packet on (other) interfaces */
|
||||
ip_forward(p, iphdr, inp);
|
||||
} else
|
||||
if (!ip_addr_isbroadcast(&(iphdr->dest), inp)) {
|
||||
#if IP_NAT
|
||||
/* check if we want to perform NAT with this packet. */
|
||||
taken = ip_nat_out(p);
|
||||
if (!taken)
|
||||
#endif /* IP_NAT */
|
||||
{
|
||||
#if IP_FORWARD
|
||||
/* try to forward IP packet on (other) interfaces */
|
||||
if (ip_forward(p, iphdr, inp) != NULL) {
|
||||
taken = 1;
|
||||
}
|
||||
#endif /* IP_FORWARD */
|
||||
}
|
||||
}
|
||||
if (!taken)
|
||||
#endif /* IP_FORWARD || IP_NAT */
|
||||
{
|
||||
snmp_inc_ipinaddrerrors();
|
||||
snmp_inc_ipindiscards();
|
||||
@ -553,6 +573,13 @@ ip_input(struct pbuf *p, struct netif *inp)
|
||||
current_netif = inp;
|
||||
current_header = iphdr;
|
||||
|
||||
#if IP_NAT
|
||||
if (!ip_addr_isbroadcast(&(iphdr->dest), inp) &&
|
||||
(ip_nat_input(p) != 0)) {
|
||||
LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet consumed by nat layer\n"));
|
||||
} else
|
||||
#endif /* IP_NAT */
|
||||
|
||||
#if LWIP_RAW
|
||||
/* raw input did not eat the packet? */
|
||||
if (raw_input(p, inp) == 0)
|
||||
|
19
components/net/lwip_nat/README.md
Normal file
19
components/net/lwip_nat/README.md
Normal file
@ -0,0 +1,19 @@
|
||||
lwIP NAT componenent
|
||||
|
||||
If you want to use lwIP NAT componenent, please define LWIP_USING_NAT in rtconfig.h.
|
||||
|
||||
In this case the network 213.129.231.168/29 is nat'ed when packets are sent to the
|
||||
destination network 10.0.0.0/24 (untypical example - most users will have the other
|
||||
way around).
|
||||
|
||||
Use following code to add a NAT entry:
|
||||
|
||||
ip_nat_entry_t nat_entry;
|
||||
|
||||
nat_entry.out_if = (struct netif *)&emac_if1;
|
||||
nat_entry.in_if = (struct netif *)&emac_if2;
|
||||
IP4_ADDR(&nat_entry.source_net, 213, 129, 231, 168);
|
||||
IP4_ADDR(&nat_entry.source_netmask, 255, 255, 255, 248);
|
||||
IP4_ADDR(&nat_entry.dest_net, 10, 0, 0, 0);
|
||||
IP4_ADDR(&nat_entry.source_netmask, 255, 0, 0, 0);
|
||||
ip_nat_add(&_nat_entry);
|
@ -435,8 +435,8 @@ ip_nat_check_header(struct pbuf *p, u16_t min_size)
|
||||
* @return 1 if the packet has been consumed (it was a NAT packet),
|
||||
* 0 if the packet has not been consumed (no NAT packet)
|
||||
*/
|
||||
int
|
||||
ip_nat_input(struct pbuf *p, struct netif *inp)
|
||||
u8_t
|
||||
ip_nat_input(struct pbuf *p)
|
||||
{
|
||||
struct ip_hdr *iphdr = (struct ip_hdr*)p->payload;
|
||||
struct tcp_hdr *tcphdr;
|
||||
@ -444,7 +444,7 @@ ip_nat_input(struct pbuf *p, struct netif *inp)
|
||||
struct icmp_echo_hdr *icmphdr;
|
||||
nat_entry_t nat_entry;
|
||||
err_t err;
|
||||
int consumed = 0;
|
||||
u8_t consumed = 0;
|
||||
int i;
|
||||
struct pbuf *q = NULL;
|
||||
|
||||
|
@ -88,7 +88,7 @@ typedef struct ip_nat_entry
|
||||
|
||||
void ip_nat_init(void);
|
||||
void ip_nat_tmr(void);
|
||||
int ip_nat_input(struct pbuf *p, struct netif *inp);
|
||||
u8_t ip_nat_input(struct pbuf *p);
|
||||
u8_t ip_nat_out(struct pbuf *p);
|
||||
|
||||
err_t ip_nat_add(const ip_nat_entry_t *new_entry);
|
||||
|
Loading…
x
Reference in New Issue
Block a user