Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
码肥人壮
rt-thread
提交
3d6e0ea3
R
rt-thread
项目概览
码肥人壮
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3d6e0ea3
编写于
4月 16, 2019
作者:
Lawlieta
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[net][netdev]add network interface device components, SAL component adaptation netdev change
上级
c8870b42
变更
17
展开全部
隐藏空白更改
内联
并排
Showing
17 changed file
with
2049 addition
and
574 deletion
+2049
-574
components/finsh/msh_cmd.c
components/finsh/msh_cmd.c
+0
-91
components/net/Kconfig
components/net/Kconfig
+42
-7
components/net/netdev/SConscript
components/net/netdev/SConscript
+13
-0
components/net/netdev/include/arpa/inet.h
components/net/netdev/include/arpa/inet.h
+3
-3
components/net/netdev/include/netdev.h
components/net/netdev/include/netdev.h
+179
-0
components/net/netdev/include/netdev_ipaddr.h
components/net/netdev/include/netdev_ipaddr.h
+169
-0
components/net/netdev/src/netdev.c
components/net/netdev/src/netdev.c
+1115
-0
components/net/netdev/src/netdev_ipaddr.c
components/net/netdev/src/netdev_ipaddr.c
+22
-22
components/net/sal_socket/impl/af_inet.h
components/net/sal_socket/impl/af_inet.h
+10
-6
components/net/sal_socket/impl/af_inet_at.c
components/net/sal_socket/impl/af_inet_at.c
+10
-18
components/net/sal_socket/impl/af_inet_lwip.c
components/net/sal_socket/impl/af_inet_lwip.c
+11
-18
components/net/sal_socket/impl/proto_mbedtls.c
components/net/sal_socket/impl/proto_mbedtls.c
+10
-2
components/net/sal_socket/include/sal.h
components/net/sal_socket/include/sal.h
+27
-29
components/net/sal_socket/include/sal_netdb.h
components/net/sal_socket/include/sal_netdb.h
+1
-1
components/net/sal_socket/include/sal_socket.h
components/net/sal_socket/include/sal_socket.h
+1
-1
components/net/sal_socket/include/sal_type.h
components/net/sal_socket/include/sal_type.h
+0
-34
components/net/sal_socket/src/sal_socket.c
components/net/sal_socket/src/sal_socket.c
+436
-342
未找到文件。
components/finsh/msh_cmd.c
浏览文件 @
3d6e0ea3
...
...
@@ -291,97 +291,6 @@ int cmd_echo(int argc, char** argv)
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_echo
,
__cmd_echo
,
echo
string
to
file
);
#endif
#ifdef RT_USING_LWIP
int
cmd_ifconfig
(
int
argc
,
char
**
argv
)
{
extern
void
list_if
(
void
);
extern
void
set_if
(
char
*
netif_name
,
char
*
ip_addr
,
char
*
gw_addr
,
char
*
nm_addr
);
if
(
argc
==
1
)
{
list_if
();
}
else
if
(
argc
==
5
)
{
rt_kprintf
(
"config : %s
\n
"
,
argv
[
1
]);
rt_kprintf
(
"IP addr: %s
\n
"
,
argv
[
2
]);
rt_kprintf
(
"Gateway: %s
\n
"
,
argv
[
3
]);
rt_kprintf
(
"netmask: %s
\n
"
,
argv
[
4
]);
set_if
(
argv
[
1
],
argv
[
2
],
argv
[
3
],
argv
[
4
]);
}
else
{
rt_kprintf
(
"bad parameter! e.g: ifconfig e0 192.168.1.30 192.168.1.1 255.255.255.0
\n
"
);
}
return
0
;
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_ifconfig
,
__cmd_ifconfig
,
list
the
information
of
network
interfaces
);
#ifdef RT_LWIP_DNS
#include <lwip/api.h>
#include <lwip/dns.h>
#include <lwip/ip_addr.h>
#include <lwip/init.h>
int
cmd_dns
(
int
argc
,
char
**
argv
)
{
extern
void
set_dns
(
char
*
dns_server
);
if
(
argc
==
1
)
{
int
index
;
#if (LWIP_VERSION) < 0x02000000U
ip_addr_t
ip_addr
;
for
(
index
=
0
;
index
<
DNS_MAX_SERVERS
;
index
++
)
{
ip_addr
=
dns_getserver
(
index
);
rt_kprintf
(
"dns server #%d: %s
\n
"
,
index
,
ipaddr_ntoa
(
&
ip_addr
));
}
#else
const
ip_addr_t
*
ip_addr
;
for
(
index
=
0
;
index
<
DNS_MAX_SERVERS
;
index
++
)
{
ip_addr
=
dns_getserver
(
index
);
rt_kprintf
(
"dns server #%d: %s
\n
"
,
index
,
ipaddr_ntoa
(
ip_addr
));
}
#endif
}
else
if
(
argc
==
2
)
{
rt_kprintf
(
"dns : %s
\n
"
,
argv
[
1
]);
set_dns
(
argv
[
1
]);
}
else
{
rt_kprintf
(
"bad parameter! e.g: dns 114.114.114.114
\n
"
);
}
return
0
;
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_dns
,
__cmd_dns
,
list
the
information
of
dns
);
#endif
#if defined (RT_LWIP_TCP) || defined (RT_LWIP_UDP)
int
cmd_netstat
(
int
argc
,
char
**
argv
)
{
extern
void
list_tcps
(
void
);
extern
void
list_udps
(
void
);
#ifdef RT_LWIP_TCP
list_tcps
();
#endif
#ifdef RT_LWIP_UDP
list_udps
();
#endif
return
0
;
}
FINSH_FUNCTION_EXPORT_ALIAS
(
cmd_netstat
,
__cmd_netstat
,
list
the
information
of
TCP
/
IP
);
#endif
#endif
/* RT_USING_LWIP */
int
cmd_ps
(
int
argc
,
char
**
argv
)
{
extern
long
list_thread
(
void
);
...
...
components/net/Kconfig
浏览文件 @
3d6e0ea3
...
...
@@ -4,6 +4,8 @@ menu "Socket abstraction layer"
config RT_USING_SAL
bool "Enable socket abstraction layer"
select RT_USING_NETDEV
select RT_USING_SYSTEM_WORKQUEUE
default n
if RT_USING_SAL
...
...
@@ -46,10 +48,30 @@ config RT_USING_SAL
default 16
endif
endif
endmenu
menu "Network interface device"
config RT_USING_NETDEV
bool "Enable network interface device"
default n
if RT_USING_NETDEV
config NETDEV_USING_IFCONFIG
bool "Enable ifconfig features"
default y
config NETDEV_USING_PING
bool "Enable ping features"
default y
config
SAL_PROTO_FAMILIES_NUM
int "the maximum number of protocol famili
es"
default
4
config
NETDEV_USING_NETSTAT
bool "Enable netstat featur
es"
default
y
endif
...
...
@@ -79,9 +101,11 @@ config RT_USING_LWIP
endchoice
if (RT_USING_LWIP210 || RT_USING_LWIP202)
config RT_USING_LWIP_IPV6
bool "IPV6 protocol"
default n
if (!RT_USING_NETDEV || (RT_USING_NETDEV && NETDEV_IPV6))
config RT_USING_LWIP_IPV6
bool "IPV6 protocol"
default n
endif
endif
config RT_LWIP_IGMP
...
...
@@ -229,7 +253,11 @@ config RT_USING_LWIP
default n
config LWIP_NETIF_STATUS_CALLBACK
int "netif status callback"
int "Enable netif status callback"
default 1
config LWIP_NETIF_LINK_CALLBACK
int "Enable netif link status callback"
default 1
config SO_REUSE
...
...
@@ -264,6 +292,13 @@ config RT_USING_LWIP
config RT_LWIP_USING_HW_CHECKSUM
bool "Enable hardware checksum"
default n
config RT_LWIP_USING_PING
bool "Enable ping features"
default y
select NETDEV_USING_PING
select RT_LWIP_ICMP
select RT_LWIP_RAW
menuconfig RT_LWIP_DEBUG
bool "Enable lwIP Debugging Options"
...
...
components/net/netdev/SConscript
0 → 100644
浏览文件 @
3d6e0ea3
# RT-Thread building script for component
from
building
import
*
cwd
=
GetCurrentDir
()
src
=
Glob
(
'src/*.c'
)
CPPPATH
=
[
cwd
+
'/include'
]
group
=
DefineGroup
(
'netdev'
,
src
,
depend
=
[
'RT_USING_NETDEV'
],
CPPPATH
=
CPPPATH
)
Return
(
'group'
)
components/net/
sal_socket/include/socket
/arpa/inet.h
→
components/net/
netdev/include
/arpa/inet.h
浏览文件 @
3d6e0ea3
...
...
@@ -8,9 +8,9 @@
* 2015-02-17 Bernard First version
*/
#ifndef INET_H__
#define INET_H__
#ifndef
__
INET_H__
#define
__
INET_H__
#include <
sal
_ipaddr.h>
#include <
netdev
_ipaddr.h>
#endif
components/net/netdev/include/netdev.h
0 → 100644
浏览文件 @
3d6e0ea3
/*
* Copyright (c) 2006-2019, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2019-03-18 ChenYong First version
*/
#ifndef __NETDEV_H__
#define __NETDEV_H__
#include <rtthread.h>
#ifdef __cplusplus
extern
"C"
{
#endif
/* the maximum of all used hardware address lengths */
#ifndef NETDEV_HWADDR_MAX_LEN
#define NETDEV_HWADDR_MAX_LEN 8U
#endif
/* the maximum of dns server number supported */
#ifndef NETDEV_DNS_SERVERS_NUM
#define NETDEV_DNS_SERVERS_NUM 2U
#endif
/* whether the network interface device is 'up' (set by the network interface driver or application) */
#define NETDEV_FLAG_UP 0x01U
/* if set, the network interface device has broadcast capability, only supported in the 'lwIP' stack */
#define NETDEV_FLAG_BROADCAST 0x02U
/* if set, the network interface device has an active link (set by the network interface driver) */
#define NETDEV_FLAG_LINK_UP 0x04U
/* if set, the network interface device is an ethernet device using ARP, only supported in the 'lwIP' stack */
#define NETDEV_FLAG_ETHARP 0x08U
/* if set, the network interface device is an ethernet device, only supported in the 'lwIP' stack */
#define NETDEV_FLAG_ETHERNET 0x10U
/* if set, the network interface device has IGMP capability, only supported in the 'lwIP' stack */
#define NETDEV_FLAG_IGMP 0x20U
/* if set, the network interface device has MLD6 capability, only supported in the 'lwIP' stack */
#define NETDEV_FLAG_MLD6 0x40U
/* if set, the network interface device connected to internet successfully (set by the network interface driver) */
#define NETDEV_FLAG_INTERNET_UP 0x80U
/* if set, the network interface device has DHCP capability (set by the network interface device driver or application) */
#define NETDEV_FLAG_DHCP 0x100U
enum
netdev_cb_type
{
NETDEV_CB_ADDR_IP
,
/* IP address */
NETDEV_CB_ADDR_NETMASK
,
/* subnet mask */
NETDEV_CB_ADDR_GATEWAY
,
/* netmask */
NETDEV_CB_ADDR_DNS_SERVER
,
/* dns server */
NETDEV_CB_STATUS_UP
,
/* changed to 'up' */
NETDEV_CB_STATUS_DOWN
,
/* changed to 'down' */
NETDEV_CB_STATUS_LINK_UP
,
/* changed to 'link up' */
NETDEV_CB_STATUS_LINK_DOWN
,
/* changed to 'link down' */
NETDEV_CB_STATUS_INTERNET_UP
,
/* changed to 'internet up' */
NETDEV_CB_STATUS_INTERNET_DOWN
,
/* changed to 'internet down' */
NETDEV_CB_STATUS_DHCP_ENABLE
,
/* enable DHCP capability */
NETDEV_CB_STATUS_DHCP_DISABLE
,
/* disable DHCP capability */
};
struct
netdev
;
/* function prototype for network interface device status or address change callback functions */
typedef
void
(
*
netdev_callback_fn
)(
struct
netdev
*
netdev
,
enum
netdev_cb_type
type
);
struct
netdev_ops
;
/* network interface device object */
struct
netdev
{
rt_slist_t
list
;
char
name
[
RT_NAME_MAX
];
/* network interface device name */
ip_addr_t
ip_addr
;
/* IP address */
ip_addr_t
netmask
;
/* subnet mask */
ip_addr_t
gw
;
/* gateway */
ip_addr_t
dns_servers
[
NETDEV_DNS_SERVERS_NUM
];
/* DNS server */
uint8_t
hwaddr_len
;
/* hardware address length */
uint8_t
hwaddr
[
NETDEV_HWADDR_MAX_LEN
];
/* hardware address */
uint16_t
flags
;
/* network interface device status flag */
uint16_t
mtu
;
/* maximum transfer unit (in bytes) */
const
struct
netdev_ops
*
ops
;
/* network interface device operations */
netdev_callback_fn
status_callback
;
/* network interface device flags change callback */
netdev_callback_fn
addr_callback
;
/* network interface device address information change callback */
#ifdef RT_USING_SAL
void
*
sal_user_data
;
/* user-specific data for SAL */
#endif
/* RT_USING_SAL */
void
*
user_data
;
/* user-specific data */
};
/* The list of network interface device */
extern
struct
netdev
*
netdev_list
;
/* The default network interface device */
extern
struct
netdev
*
netdev_default
;
/* The network interface device ping response object */
struct
netdev_ping_resp
{
ip_addr_t
ip_addr
;
/* response IP address */
uint16_t
data_len
;
/* response data length */
uint16_t
ttl
;
/* time to live */
uint32_t
ticks
;
/* response time, unit tick */
void
*
user_data
;
/* user-specific data */
};
/* The network interface device operations */
struct
netdev_ops
{
/* set network interface device hardware status operations */
int
(
*
set_up
)(
struct
netdev
*
netdev
);
int
(
*
set_down
)(
struct
netdev
*
netdev
);
/* set network interface device address information operations */
int
(
*
set_addr_info
)(
struct
netdev
*
netdev
,
ip_addr_t
*
ip_addr
,
ip_addr_t
*
netmask
,
ip_addr_t
*
gw
);
int
(
*
set_dns_server
)(
struct
netdev
*
netdev
,
ip_addr_t
*
dns_server
);
int
(
*
set_dhcp
)(
struct
netdev
*
netdev
,
rt_bool_t
is_enabled
);
/* set network interface device common network interface device operations */
int
(
*
ping
)(
struct
netdev
*
netdev
,
const
char
*
host
,
size_t
data_len
,
uint32_t
timeout
,
struct
netdev_ping_resp
*
ping_resp
);
void
(
*
netstat
)(
struct
netdev
*
netdev
);
};
/* The network interface device registered and unregistered*/
int
netdev_register
(
struct
netdev
*
netdev
,
const
char
*
name
,
void
*
user_data
);
int
netdev_unregister
(
struct
netdev
*
netdev
);
/* Get network interface device object */
struct
netdev
*
netdev_get_first_link_up
(
void
);
struct
netdev
*
netdev_get_by_ipaddr
(
ip_addr_t
*
ip_addr
);
struct
netdev
*
netdev_get_by_name
(
const
char
*
name
);
#ifdef RT_USING_SAL
struct
netdev
*
netdev_get_by_family
(
int
family
);
#endif
/* RT_USING_SAL */
/* Set default network interface device in list */
void
netdev_set_default
(
struct
netdev
*
netdev
);
/* Set network interface device status */
int
netdev_set_up
(
struct
netdev
*
netdev
);
int
netdev_set_down
(
struct
netdev
*
netdev
);
int
netdev_dhcp_enabled
(
struct
netdev
*
netdev
,
rt_bool_t
is_enabled
);
/* Get network interface device status */
#define netdev_is_up(netdev) (((netdev)->flags & NETDEV_FLAG_UP) ? (uint8_t)1 : (uint8_t)0)
#define netdev_is_link_up(netdev) (((netdev)->flags & NETDEV_FLAG_LINK_UP) ? (uint8_t)1 : (uint8_t)0)
#define netdev_is_internet_up(netdev) (((netdev)->flags & NETDEV_FLAG_INTERNET_UP) ? (uint8_t)1 : (uint8_t)0)
#define netdev_is_dhcp_enabled(netdev) (((netdev)->flags & NETDEV_FLAG_DHCP) ? (uint8_t)1 : (uint8_t)0)
/* Set network interface device address */
int
netdev_set_ipaddr
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
ipaddr
);
int
netdev_set_netmask
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
netmask
);
int
netdev_set_gw
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
gw
);
int
netdev_set_dns_server
(
struct
netdev
*
netdev
,
uint8_t
dns_num
,
const
ip_addr_t
*
dns_server
);
/* Set network interface device callback, it can be called when the status or address changed */
void
netdev_set_status_callback
(
struct
netdev
*
netdev
,
netdev_callback_fn
status_callback
);
/* Set network interface device status and address, this function can only be called in the network interface device driver */
void
netdev_low_level_set_ipaddr
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
ipaddr
);
void
netdev_low_level_set_netmask
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
netmask
);
void
netdev_low_level_set_gw
(
struct
netdev
*
netdev
,
const
ip_addr_t
*
gw
);
void
netdev_low_level_set_dns_server
(
struct
netdev
*
netdev
,
uint8_t
dns_num
,
const
ip_addr_t
*
dns_server
);
void
netdev_low_level_set_status
(
struct
netdev
*
netdev
,
rt_bool_t
is_up
);
void
netdev_low_level_set_link_status
(
struct
netdev
*
netdev
,
rt_bool_t
is_up
);
void
netdev_low_level_set_dhcp_status
(
struct
netdev
*
netdev
,
rt_bool_t
is_enable
);
#ifdef __cplusplus
}
#endif
#endif
/* __NETDEV_H__ */
components/net/
sal_socket/include/sal
_ipaddr.h
→
components/net/
netdev/include/netdev
_ipaddr.h
浏览文件 @
3d6e0ea3
...
...
@@ -7,21 +7,33 @@
* Date Author Notes
* 2018-05-18 ChenYong First version
*/
#ifndef SAL_IPADDR_H__
#define SAL_IPADDR_H__
#include "sal_type.h"
#ifndef __NETDEV_IPADDR_H__
#define __NETDEV_IPADDR_H__
#include <stdint.h>
#ifdef __cplusplus
extern
"C"
{
#endif
/* Only supports the IPV4 protocol */
#ifndef NETDEV_IPV4
#define NETDEV_IPV4 1
#endif
#ifndef NETDEV_IPV6
#define NETDEV_IPV6 0
#endif
#ifdef NETDEV_IPV4
/** IPv4 only: set the IP address given as an u32_t */
#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32))
/** IPv4 only: get the IP address as an u32_t */
#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr)
#define IP4ADDR_STRLEN_MAX 16
#endif
/* NETIF_IPV4 */
/* These macros should be calculated by the preprocessor and are used
with compile-time constants only (so that there is no little-endian
...
...
@@ -34,33 +46,53 @@ extern "C" {
(((x) & 0xff000000UL) >> 24))
#define PP_NTOHL(x) PP_HTONL(x)
#define htons(x) (u16_t)PP_HTONS(x)
#define ntohs(x) (u16_t)PP_NTOHS(x)
#define htonl(x) (u32_t)PP_HTONL(x)
#define ntohl(x) (u32_t)PP_NTOHL(x)
#define htons(x) (u
int
16_t)PP_HTONS(x)
#define ntohs(x) (u
int
16_t)PP_NTOHS(x)
#define htonl(x) (u
int
32_t)PP_HTONL(x)
#define ntohl(x) (u
int
32_t)PP_NTOHL(x)
/* If your port already typedef's in_addr_t, define IN_ADDR_T_DEFINED
to prevent this code from redefining it. */
#if !defined(in_addr_t) && !defined(IN_ADDR_T_DEFINED)
typedef
u32_t
in_addr_t
;
typedef
u
int
32_t
in_addr_t
;
#endif
#if NETDEV_IPV4
struct
in_addr
{
in_addr_t
s_addr
;
};
typedef
struct
ip4_addr
{
uint32_t
addr
;
}
ip4_addr_t
;
typedef
ip4_addr_t
ip_addr_t
;
#endif
/* NETIF_IPV4 */
#if NETDEV_IPV6
struct
in6_addr
{
union
{
u32_t
u32_addr
[
4
];
u8_t
u8_addr
[
16
];
u
int
32_t
u32_addr
[
4
];
u
int
8_t
u8_addr
[
16
];
}
un
;
#define s6_addr un.u8_addr
};
enum
sal_ip_addr_type
typedef
struct
ip6_addr
{
uint32_t
addr
[
4
];
}
ip6_addr_t
;
typedef
ip6_addr
ip_addr_t
#endif
/* NETIF_IPV6 */
#if NETDEV_IPV4 && NETDEV_IPV6
/* IP address types for use in ip_addr_t.type member */
enum
netdev_ip_addr_type
{
/** IPv4 */
IPADDR_TYPE_V4
=
0U
,
...
...
@@ -70,16 +102,7 @@ enum sal_ip_addr_type
IPADDR_TYPE_ANY
=
46U
};
typedef
struct
ip4_addr
{
u32_t
addr
;
}
ip4_addr_t
;
typedef
struct
ip6_addr
{
u32_t
addr
[
4
];
}
ip6_addr_t
;
/* A union struct for both IP version's addresses */
typedef
struct
_ip_addr
{
union
...
...
@@ -87,18 +110,19 @@ typedef struct _ip_addr
ip6_addr_t
ip6
;
ip4_addr_t
ip4
;
}
u_addr
;
/** @ref
sal
_ip_addr_type */
u8_t
type
;
/** @ref
netdev
_ip_addr_type */
u
int
8_t
type
;
}
ip_addr_t
;
#endif
/* NETIF_IPV4 && NETIF_IPV6 */
/** 255.255.255.255 */
#define IPADDR_NONE ((u32_t)0xffffffffUL)
#define IPADDR_NONE ((u
int
32_t)0xffffffffUL)
/** 127.0.0.1 */
#define IPADDR_LOOPBACK ((u32_t)0x7f000001UL)
#define IPADDR_LOOPBACK ((u
int
32_t)0x7f000001UL)
/** 0.0.0.0 */
#define IPADDR_ANY ((u32_t)0x00000000UL)
#define IPADDR_ANY ((u
int
32_t)0x00000000UL)
/** 255.255.255.255 */
#define IPADDR_BROADCAST ((u32_t)0xffffffffUL)
#define IPADDR_BROADCAST ((u
int
32_t)0xffffffffUL)
/** 255.255.255.255 */
#define INADDR_NONE IPADDR_NONE
...
...
@@ -111,18 +135,35 @@ typedef struct _ip_addr
#define IPADDR_BROADCAST_STRING "255.255.255.255"
in_addr_t
sal_ipaddr_addr
(
const
char
*
cp
);
int
sal_ip4addr_aton
(
const
char
*
cp
,
ip4_addr_t
*
addr
);
char
*
sal_ip4addr_ntoa
(
const
ip4_addr_t
*
addr
);
char
*
sal_ip4addr_ntoa_r
(
const
ip4_addr_t
*
addr
,
char
*
buf
,
int
buflen
);
#ifdef NETDEV_IPV4
/** Copy IP address - faster than ip4_addr_set: no NULL check */
#define ip4_addr_copy(dest, src) ((dest).addr = (src).addr)
#define ip4_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr)
/** Set complete address to zero */
#define ip4_addr_set_zero(ipaddr) ((ipaddr)->addr = 0)
#define ip4_addr_isany_val(ipaddr) ((ipaddr).addr == IPADDR_ANY)
#define ip4_addr_isany(ipaddr) ((ipaddr) == NULL || ip4_addr_isany_val(*(ipaddr)))
#define ip_addr_copy(dest, src) ip4_addr_copy(dest, src)
#define ip_addr_cmp(addr1, addr2) ip4_addr_cmp(addr1, addr2)
#define ip_addr_set_zero(ipaddr) ip4_addr_set_zero(ipaddr)
#define ip_addr_isany(ipaddr) ip4_addr_isany(ipaddr)
in_addr_t
netdev_ipaddr_addr
(
const
char
*
cp
);
int
netdev_ip4addr_aton
(
const
char
*
cp
,
ip4_addr_t
*
addr
);
char
*
netdev_ip4addr_ntoa
(
const
ip4_addr_t
*
addr
);
char
*
netdev_ip4addr_ntoa_r
(
const
ip4_addr_t
*
addr
,
char
*
buf
,
int
buflen
);
#define inet_addr(cp) netdev_ipaddr_addr(cp)
#define inet_aton(cp, addr) netdev_ip4addr_aton(cp,(ip4_addr_t*)addr)
#define inet_ntoa(addr) netdev_ip4addr_ntoa((const ip4_addr_t*)&(addr))
#define inet_ntoa_r(addr, buf, buflen) netdev_ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen)
#define inet_addr(cp) sal_ipaddr_addr(cp)
#define inet_aton(cp,addr) sal_ip4addr_aton(cp,(ip4_addr_t*)addr)
#define inet_ntoa(addr) sal_ip4addr_ntoa((const ip4_addr_t*)&(addr))
#define inet_ntoa_r(addr, buf, buflen) sal_ip4addr_ntoa_r((const ip4_addr_t*)&(addr), buf, buflen)
#endif
/* NETDEV_IPV4 */
#ifdef __cplusplus
}
#endif
#endif
/*
SAL
_IPADDR_H__ */
#endif
/*
__NETDEV
_IPADDR_H__ */
components/net/netdev/src/netdev.c
0 → 100644
浏览文件 @
3d6e0ea3
此差异已折叠。
点击以展开。
components/net/
sal_socket/src/sal
_ipaddr.c
→
components/net/
netdev/src/netdev
_ipaddr.c
浏览文件 @
3d6e0ea3
...
...
@@ -8,12 +8,12 @@
* 2018-05-18 ChenYong First version
*/
#include <sal_ipaddr.h>
#include <rtthread.h>
#include <netdev_ipaddr.h>
/* Here for now until needed in other places in lwIP */
#ifndef isprint
#define in_range(c, lo, up) ((u
8_t)c >= lo && (u
8_t)c <= up)
#define in_range(c, lo, up) ((u
int8_t)c >= lo && (uint
8_t)c <= up)
#define isprint(c) in_range(c, 0x20, 0x7f)
#define isdigit(c) in_range(c, '0', '9')
#define isxdigit(c) (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F'))
...
...
@@ -33,13 +33,13 @@
* @param addr pointer to which to save the ip address in network order
* @return 1 if cp could be converted to addr, 0 on failure
*/
int
sal
_ip4addr_aton
(
const
char
*
cp
,
ip4_addr_t
*
addr
)
int
netdev
_ip4addr_aton
(
const
char
*
cp
,
ip4_addr_t
*
addr
)
{
u32_t
val
;
u8_t
base
;
u
int
32_t
val
;
u
int
8_t
base
;
char
c
;
u32_t
parts
[
4
];
u32_t
*
pp
=
parts
;
u
int
32_t
parts
[
4
];
u
int
32_t
*
pp
=
parts
;
c
=
*
cp
;
for
(;;)
...
...
@@ -72,12 +72,12 @@ int sal_ip4addr_aton(const char *cp, ip4_addr_t *addr)
{
if
(
isdigit
(
c
))
{
val
=
(
val
*
base
)
+
(
u32_t
)
(
c
-
'0'
);
val
=
(
val
*
base
)
+
(
u
int
32_t
)
(
c
-
'0'
);
c
=
*++
cp
;
}
else
if
(
base
==
16
&&
isxdigit
(
c
))
{
val
=
(
val
<<
4
)
|
(
u32_t
)
(
c
+
10
-
(
islower
(
c
)
?
'a'
:
'A'
));
val
=
(
val
<<
4
)
|
(
u
int
32_t
)
(
c
+
10
-
(
islower
(
c
)
?
'a'
:
'A'
));
c
=
*++
cp
;
}
else
...
...
@@ -180,28 +180,28 @@ int sal_ip4addr_aton(const char *cp, ip4_addr_t *addr)
* @return either pointer to buf which now holds the ASCII
* representation of addr or NULL if buf was too small
*/
char
*
sal
_ip4addr_ntoa_r
(
const
ip4_addr_t
*
addr
,
char
*
buf
,
int
buflen
)
char
*
netdev
_ip4addr_ntoa_r
(
const
ip4_addr_t
*
addr
,
char
*
buf
,
int
buflen
)
{
u32_t
s_addr
;
u
int
32_t
s_addr
;
char
inv
[
3
];
char
*
rp
;
u8_t
*
ap
;
u8_t
rem
;
u8_t
n
;
u8_t
i
;
u
int
8_t
*
ap
;
u
int
8_t
rem
;
u
int
8_t
n
;
u
int
8_t
i
;
int
len
=
0
;
s_addr
=
ip4_addr_get_u32
(
addr
);
rp
=
buf
;
ap
=
(
u8_t
*
)
&
s_addr
;
ap
=
(
u
int
8_t
*
)
&
s_addr
;
for
(
n
=
0
;
n
<
4
;
n
++
)
{
i
=
0
;
do
{
rem
=
*
ap
%
(
u8_t
)
10
;
*
ap
/=
(
u8_t
)
10
;
rem
=
*
ap
%
(
u
int
8_t
)
10
;
*
ap
/=
(
u
int
8_t
)
10
;
inv
[
i
++
]
=
(
char
)
(
'0'
+
rem
);
}
while
(
*
ap
);
while
(
i
--
)
...
...
@@ -232,10 +232,10 @@ char *sal_ip4addr_ntoa_r(const ip4_addr_t *addr, char *buf, int buflen)
* @return pointer to a global static (!) buffer that holds the ASCII
* representation of addr
*/
char
*
sal
_ip4addr_ntoa
(
const
ip4_addr_t
*
addr
)
char
*
netdev
_ip4addr_ntoa
(
const
ip4_addr_t
*
addr
)
{
static
char
str
[
IP4ADDR_STRLEN_MAX
];
return
sal
_ip4addr_ntoa_r
(
addr
,
str
,
IP4ADDR_STRLEN_MAX
);
return
netdev
_ip4addr_ntoa_r
(
addr
,
str
,
IP4ADDR_STRLEN_MAX
);
}
...
...
@@ -246,11 +246,11 @@ char *sal_ip4addr_ntoa(const ip4_addr_t *addr)
* @param cp IP address in ascii representation (e.g. "127.0.0.1")
* @return ip address in network order
*/
in_addr_t
sal
_ipaddr_addr
(
const
char
*
cp
)
in_addr_t
netdev
_ipaddr_addr
(
const
char
*
cp
)
{
ip4_addr_t
val
;
if
(
sal
_ip4addr_aton
(
cp
,
&
val
))
{
if
(
netdev
_ip4addr_aton
(
cp
,
&
val
))
{
return
ip4_addr_get_u32
(
&
val
);
}
return
(
IPADDR_NONE
);
...
...
components/net/sal_socket/impl/af_inet.h
浏览文件 @
3d6e0ea3
...
...
@@ -18,14 +18,18 @@ extern "C" {
#endif
#ifdef SAL_USING_LWIP
/* lwIP protocol family register */
int
lwip_inet_init
(
void
);
#endif
/* Set lwIP network interface device protocol family information */
int
sal_lwip_netdev_set_pf_info
(
struct
netdev
*
netdev
);
#endif
/* SAL_USING_LWIP */
#ifdef SAL_USING_AT
/* AT protocol family register */
int
at_inet_init
(
void
);
#endif
/* Set AT network interface device protocol family information */
int
sal_at_netdev_set_pf_info
(
struct
netdev
*
netdev
);
#endif
/* SAL_USING_AT */
#ifdef __cplusplus
}
...
...
components/net/sal_socket/impl/af_inet_at.c
浏览文件 @
3d6e0ea3
...
...
@@ -16,6 +16,8 @@
#include <at_socket.h>
#include <af_inet.h>
#include <netdev.h>
#ifdef SAL_USING_POSIX
#include <dfs_poll.h>
#endif
...
...
@@ -78,24 +80,12 @@ static const struct sal_socket_ops at_socket_ops =
NULL
,
NULL
,
NULL
,
#ifdef SAL_USING_POSIX
at_poll
,
#endif
/* SAL_USING_POSIX */
};
static
int
at_create
(
struct
sal_socket
*
socket
,
int
type
,
int
protocol
)
{
RT_ASSERT
(
socket
);
//TODO Check type & protocol
socket
->
ops
=
&
at_socket_ops
;
return
0
;
}
static
struct
sal_proto_ops
at_proto_ops
=
static
const
struct
sal_netdb_ops
at_netdb_ops
=
{
at_gethostbyname
,
NULL
,
...
...
@@ -107,16 +97,18 @@ static const struct sal_proto_family at_inet_family =
{
AF_AT
,
AF_INET
,
at_create
,
&
at_
proto
_ops
,
&
at_socket_ops
,
&
at_
netdb
_ops
,
};
int
at_inet_init
(
void
)
/* Set AT network interface device protocol family information */
int
sal_at_netdev_set_pf_info
(
struct
netdev
*
netdev
)
{
sal_proto_family_register
(
&
at_inet_family
);
RT_ASSERT
(
netdev
);
netdev
->
sal_user_data
=
(
void
*
)
&
at_inet_family
;
return
0
;
}
INIT_COMPONENT_EXPORT
(
at_inet_init
);
#endif
/* SAL_USING_AT */
components/net/sal_socket/impl/af_inet_lwip.c
浏览文件 @
3d6e0ea3
...
...
@@ -14,6 +14,7 @@
#include <lwip/netdb.h>
#include <lwip/api.h>
#include <lwip/init.h>
#include <lwip/netif.h>
#ifdef SAL_USING_POSIX
#include <dfs_poll.h>
...
...
@@ -22,6 +23,8 @@
#include <sal.h>
#include <af_inet.h>
#include <netdev.h>
#if LWIP_VERSION < 0x2000000
#define SELWAIT_T int
#else
...
...
@@ -281,18 +284,7 @@ static const struct sal_socket_ops lwip_socket_ops =
#endif
};
static
int
inet_create
(
struct
sal_socket
*
socket
,
int
type
,
int
protocol
)
{
RT_ASSERT
(
socket
);
//TODO Check type & protocol
socket
->
ops
=
&
lwip_socket_ops
;
return
0
;
}
static
struct
sal_proto_ops
lwip_proto_ops
=
static
const
struct
sal_netdb_ops
lwip_netdb_ops
=
{
lwip_gethostbyname
,
lwip_gethostbyname_r
,
...
...
@@ -304,16 +296,17 @@ static const struct sal_proto_family lwip_inet_family =
{
AF_INET
,
AF_INET
,
inet_create
,
&
lwip_
proto
_ops
,
&
lwip_socket_ops
,
&
lwip_
netdb
_ops
,
};
int
lwip_inet_init
(
void
)
/* Set lwIP network interface device protocol family information */
int
sal_lwip_netdev_set_pf_info
(
struct
netdev
*
netdev
)
{
sal_proto_family_register
(
&
lwip_inet_family
);
RT_ASSERT
(
netdev
);
netdev
->
sal_user_data
=
(
void
*
)
&
lwip_inet_family
;
return
0
;
}
INIT_COMPONENT_EXPORT
(
lwip_inet_init
);
#endif
/* SAL_USING_LWIP */
components/net/sal_socket/impl/proto_mbedtls.c
浏览文件 @
3d6e0ea3
...
...
@@ -20,6 +20,8 @@
#include <netdb.h>
#include <sal.h>
#include <netdev.h>
#ifdef SAL_USING_TLS
#if !defined(MBEDTLS_CONFIG_FILE)
...
...
@@ -76,6 +78,7 @@ int mbedtls_net_send_cb(void *ctx, const unsigned char *buf, size_t len)
{
struct
sal_socket
*
sock
;
int
socket
,
ret
;
struct
sal_proto_family
*
pf
;
RT_ASSERT
(
ctx
);
RT_ASSERT
(
buf
);
...
...
@@ -86,9 +89,11 @@ int mbedtls_net_send_cb(void *ctx, const unsigned char *buf, size_t len)
{
return
-
1
;
}
pf
=
(
struct
sal_proto_family
*
)
sock
->
netdev
->
sal_user_data
;
/* Register scoket sendto option to TLS send data callback */
ret
=
sock
->
ops
->
sendto
((
int
)
sock
->
user_data
,
(
void
*
)
buf
,
len
,
0
,
RT_NULL
,
RT_NULL
);
ret
=
pf
->
skt_
ops
->
sendto
((
int
)
sock
->
user_data
,
(
void
*
)
buf
,
len
,
0
,
RT_NULL
,
RT_NULL
);
if
(
ret
<
0
)
{
#ifdef RT_USING_DFS
...
...
@@ -109,6 +114,7 @@ int mbedtls_net_send_cb(void *ctx, const unsigned char *buf, size_t len)
int
mbedtls_net_recv_cb
(
void
*
ctx
,
unsigned
char
*
buf
,
size_t
len
)
{
struct
sal_socket
*
sock
;
struct
sal_proto_family
*
pf
;
int
socket
,
ret
;
RT_ASSERT
(
ctx
);
...
...
@@ -121,8 +127,10 @@ int mbedtls_net_recv_cb( void *ctx, unsigned char *buf, size_t len)
return
-
1
;
}
pf
=
(
struct
sal_proto_family
*
)
sock
->
netdev
->
sal_user_data
;
/* Register scoket recvfrom option to TLS recv data callback */
ret
=
sock
->
ops
->
recvfrom
((
int
)
sock
->
user_data
,
(
void
*
)
buf
,
len
,
0
,
RT_NULL
,
RT_NULL
);
ret
=
pf
->
skt_
ops
->
recvfrom
((
int
)
sock
->
user_data
,
(
void
*
)
buf
,
len
,
0
,
RT_NULL
,
RT_NULL
);
if
(
ret
<
0
)
{
#ifdef RT_USING_DFS
...
...
components/net/sal_socket/include/sal.h
浏览文件 @
3d6e0ea3
...
...
@@ -43,6 +43,24 @@ typedef uint32_t socklen_t;
#define SAL_SOCKET_OFFSET 0
#endif
struct
sal_socket
{
uint32_t
magic
;
/* SAL socket magic word */
int
socket
;
/* SAL socket descriptor */
int
domain
;
int
type
;
int
protocol
;
struct
netdev
*
netdev
;
/* SAL network interface device */
void
*
user_data
;
/* user-specific data */
#ifdef SAL_USING_TLS
void
*
user_data_tls
;
/* user-specific TLS data */
#endif
};
/* network interface socket opreations */
struct
sal_socket_ops
{
int
(
*
socket
)
(
int
domain
,
int
type
,
int
protocol
);
...
...
@@ -64,7 +82,8 @@ struct sal_socket_ops
#endif
};
struct
sal_proto_ops
/* sal network database name resolving */
struct
sal_netdb_ops
{
struct
hostent
*
(
*
gethostbyname
)
(
const
char
*
name
);
int
(
*
gethostbyname_r
)(
const
char
*
name
,
struct
hostent
*
ret
,
char
*
buf
,
size_t
buflen
,
struct
hostent
**
result
,
int
*
h_errnop
);
...
...
@@ -72,42 +91,21 @@ struct sal_proto_ops
void
(
*
freeaddrinfo
)
(
struct
addrinfo
*
ai
);
};
struct
sal_socket
{
uint32_t
magic
;
/* SAL socket magic word */
int
socket
;
/* SAL socket descriptor */
int
domain
;
int
type
;
int
protocol
;
const
struct
sal_socket_ops
*
ops
;
/* socket options */
void
*
user_data
;
/* user-specific data */
#ifdef SAL_USING_TLS
void
*
user_data_tls
;
/* user-specific TLS data */
#endif
};
struct
sal_proto_family
{
int
family
;
/* primary protocol families type */
int
sec_family
;
/* secondary protocol families type */
int
(
*
create
)(
struct
sal_socket
*
sal_socket
,
int
type
,
int
protocol
);
/* register socket options */
struct
sal_proto_ops
*
ops
;
/* protocol family options */
int
family
;
/* primary protocol families type */
int
sec_family
;
/* secondary protocol families type */
const
struct
sal_socket_ops
*
skt_ops
;
/* socket opreations */
const
struct
sal_netdb_ops
*
netdb_ops
;
/* network database opreations */
};
/* SAL(Socket Abstraction Layer) initialize */
int
sal_init
(
void
);
/* Get SAL socket object by socket descriptor */
struct
sal_socket
*
sal_get_socket
(
int
sock
);
/* SAL protocol family register and unregister operate */
int
sal_proto_family_register
(
const
struct
sal_proto_family
*
pf
);
int
sal_proto_family_unregister
(
int
family
);
rt_bool_t
sal_proto_family_is_registered
(
int
family
);
struct
sal_proto_family
*
sal_proto_family_find
(
int
family
);
/* check SAL socket netweork interface device internet status */
int
sal_check_netdev_internet_up
(
struct
netdev
*
netdev
);
#ifdef __cplusplus
}
...
...
components/net/sal_socket/include/sal_netdb.h
浏览文件 @
3d6e0ea3
...
...
@@ -10,7 +10,7 @@
#ifndef SAL_NETDB_H__
#define SAL_NETDB_H__
#include
<sal_socket.h>
#include
"sal_socket.h"
#ifdef __cplusplus
extern
"C"
{
...
...
components/net/sal_socket/include/sal_socket.h
浏览文件 @
3d6e0ea3
...
...
@@ -11,7 +11,7 @@
#ifndef SAL_SOCKET_H__
#define SAL_SOCKET_H__
#include
"sal_ipaddr.h"
#include
<arpa/inet.h>
#ifdef __cplusplus
extern
"C"
{
...
...
components/net/sal_socket/include/sal_type.h
已删除
100644 → 0
浏览文件 @
c8870b42
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-17 ChenYong First version
*/
#ifndef SAL_TYPE_H__
#define SAL_TYPE_H__
#include <stdlib.h>
#include <stdint.h>
#ifdef __cplusplus
extern
"C"
{
#endif
typedef
int8_t
err_t
;
typedef
uint8_t
u8_t
;
typedef
int8_t
s8_t
;
typedef
uint16_t
u16_t
;
typedef
int16_t
s16_t
;
typedef
uint32_t
u32_t
;
typedef
int32_t
s32_t
;
typedef
uintptr_t
mem_ptr_t
;
#ifdef __cplusplus
}
#endif
#endif
/* SAL_TYPE_H__ */
components/net/sal_socket/src/sal_socket.c
浏览文件 @
3d6e0ea3
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录