VSF Documented
vsf_netdrv.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_NETDRV_H__
19#define __VSF_NETDRV_H__
20
21/*============================ INCLUDES ======================================*/
22
24
25#if VSF_USE_TCPIP == ENABLED
26
27#include "kernel/vsf_kernel.h"
28
29#if defined(__VSF_NETDRV_CLASS_IMPLEMENT)
30# define __VSF_CLASS_IMPLEMENT__
31#elif defined(__VSF_NETDRV_CLASS_INHERIT_NETLINK__) || defined(__VSF_NETDRV_CLASS_INHERIT_NETIF__)
32# define __VSF_CLASS_INHERIT__
33#endif
34
35#include "utilities/ooc_class.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41/*============================ MACROS ========================================*/
42/*============================ MACROFIED FUNCTIONS ===========================*/
43/*============================ TYPES =========================================*/
44
48
49typedef enum vk_netdrv_feature_t {
52
54#if defined(__VSF_NETDRV_CLASS_IMPLEMENT) || defined(__VSF_NETDRV_CLASS_INHERIT_NETLINK__)
55 protected_member(
56#else
57 private_member(
58#endif
59 vsf_err_t (*init)(vk_netdrv_t *netdrv);
60 vsf_err_t (*fini)(vk_netdrv_t *netdrv);
61
62 // can_output returns slot pointer which will be passed to output
63 void * (*can_output)(vk_netdrv_t *netdrv);
64 vsf_err_t (*output)(vk_netdrv_t *netdrv, void *slot, void *netbuf);
65 )
66};
67
69#if defined(__VSF_NETDRV_CLASS_IMPLEMENT) || defined(__VSF_NETDRV_CLASS_INHERIT_NETIF__)
70 protected_member(
71#else
72 private_member(
73#endif
74 vsf_err_t (*on_connect)(void *netif);
75 void (*on_disconnect)(void *netif);
76 void (*on_netbuf_outputted)(void *netif, void *netbuf);
77 void (*on_netlink_outputted)(void *netif, vsf_err_t err);
78 void (*on_inputted)(void *netif, void *netbuf, uint_fast32_t size);
79
80 void * (*alloc_buf)(void *netif, uint_fast32_t len);
81 void (*free_buf)(void *netbuf);
82 void * (*read_buf)(void *netbuf, vsf_mem_t *mem);
83 uint8_t * (*header)(void *netbuf, int32_t len);
84
85 vk_netdrv_feature_t (*feature)(void);
86 void * (*thread)(void (*entry)(void *param), void *param);
87 )
88};
89
90typedef struct vk_netdrv_addr_t {
92 union {
96 };
98
100
101 protected_member(
102 vk_netdrv_addr_t macaddr;
103 uint16_t mac_header_size;
104 uint16_t mtu;
105 uint16_t hwtype;
106
107 uint8_t is_to_free;
108 uint8_t is_connected;
110
111#if defined(__VSF_NETDRV_CLASS_IMPLEMENT) || defined(__VSF_NETDRV_CLASS_INHERIT_NETIF__)
112 protected_member(
113#else
114 private_member(
115#endif
116 struct {
117 void *netif;
118 const vk_netdrv_adapter_op_t *op;
119 vsf_dlist_t eda_pending_list;
120 } adapter;
121 )
122
124 protected_member(
125#else
126 private_member(
127#endif
128 struct {
129 void *param;
130 const vk_netlink_op_t *op;
131 } netlink;
132 )
133};
134
135/*============================ GLOBAL VARIABLES ==============================*/
136/*============================ PROTOTYPES ====================================*/
137
143
144extern void vk_netdrv_prepare(vk_netdrv_t *netdrv);
146
148extern void vk_netdrv_disconnect(vk_netdrv_t *netdrv);
149extern void vk_netdrv_set_netlink_op(vk_netdrv_t *netdrv, const vk_netlink_op_t *netlink_op, void *param);
150extern void * vk_netdrv_get_netif(vk_netdrv_t *netdrv);
151
152#if defined(__VSF_NETDRV_CLASS_IMPLEMENT) || defined(__VSF_NETDRV_CLASS_INHERIT_NETLINK__)
153extern uint8_t * vk_netdrv_header(vk_netdrv_t *netdrv, void *netbuf, int32_t len);
154extern bool vk_netdrv_is_connected(vk_netdrv_t *netdrv);
155extern void * vk_netdrv_read_buf(vk_netdrv_t *netdrv, void *netbuf, vsf_mem_t *mem);
156extern void * vk_netdrv_alloc_buf(vk_netdrv_t *netdrv);
157extern void vk_netdrv_on_netbuf_outputted(vk_netdrv_t *netdrv, void *netbuf);
159extern void vk_netdrv_on_outputted(vk_netdrv_t *netdrv, void *netbuf, vsf_err_t err);
160extern void vk_netdrv_on_inputted(vk_netdrv_t *netdrv, void *netbuf, int_fast32_t size);
161
162extern void * vk_netdrv_thread(vk_netdrv_t *netdrv,void (*entry)(void *), void *param);
163#endif
164
165#if defined(__VSF_NETDRV_CLASS_IMPLEMENT) || defined(__VSF_NETDRV_CLASS_INHERIT_NETIF__)
166extern vsf_err_t vk_netdrv_init(vk_netdrv_t *netdrv);
167extern vsf_err_t vk_netdrv_fini(vk_netdrv_t *netdrv);
168// vk_netdrv_can_output returns a slot pointer, which will be passed to vk_netdrv_output
169extern void * vk_netdrv_can_output(vk_netdrv_t *netdrv);
170extern vsf_err_t vk_netdrv_output(vk_netdrv_t *netdrv, void *slot, void *netbuf);
171#endif
172
173// for link driver
174
175#ifdef __cplusplus
176}
177#endif
178
179/*============================ INCLUDES ======================================*/
180
181#if VSF_NETDRV_USE_WPCAP == ENABLED
183#endif
184
185#undef __VSF_NETDRV_CLASS_IMPLEMENT
186#undef __VSF_NETDRV_CLASS_INHERIT_NETLINK__
187#undef __VSF_NETDRV_CLASS_INHERIT_NETIF__
188
189#endif // VSF_USE_TCPIP
190#endif // __VSF_NETDRV_H__
vsf_err_t
Definition __type.h:42
Definition vsf_netdrv.h:68
Definition vsf_netdrv.h:99
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
int int32_t
Definition stdint.h:8
unsigned int uint_fast32_t
Definition stdint.h:27
int int_fast32_t
Definition stdint.h:26
unsigned long long uint64_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_netdrv.h:90
uint8_t addr_buf[16]
Definition vsf_netdrv.h:95
uint32_t size
Definition vsf_netdrv.h:91
uint32_t addr32
Definition vsf_netdrv.h:93
uint64_t addr64
Definition vsf_netdrv.h:94
Definition vsf_list.h:883
Definition vsf_utilities.h:51
uint32_t size
Definition vsf_memfs.h:50
vsf_err_t vk_netdrv_fini(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:119
uint8_t * vk_netdrv_header(vk_netdrv_t *netdrv, void *netbuf, int32_t len)
Definition vsf_netdrv.c:130
void * vk_netdrv_thread(vk_netdrv_t *netdrv, void(*entry)(void *), void *param)
Definition vsf_netdrv.c:107
void vk_netdrv_on_inputted(vk_netdrv_t *netdrv, void *netbuf, int_fast32_t size)
Definition vsf_netdrv.c:81
void vk_netdrv_on_netbuf_outputted(vk_netdrv_t *netdrv, void *netbuf)
Definition vsf_netdrv.c:55
void * vk_netdrv_alloc_buf(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:92
vsf_err_t vk_netdrv_init(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:113
void vk_netdrv_on_netlink_outputted(vk_netdrv_t *netdrv, vsf_err_t err)
Definition vsf_netdrv.c:67
vsf_err_t vk_netdrv_output(vk_netdrv_t *netdrv, void *slot, void *netbuf)
Definition vsf_netdrv.c:195
#define __VSF_NETDRV_CLASS_IMPLEMENT
Definition vsf_netdrv.c:24
void * vk_netdrv_can_output(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:190
bool vk_netdrv_is_connected(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:184
void vk_netdrv_on_outputted(vk_netdrv_t *netdrv, void *netbuf, vsf_err_t err)
Definition vsf_netdrv.c:74
void * vk_netdrv_read_buf(vk_netdrv_t *netdrv, void *netbuf, vsf_mem_t *mem)
Definition vsf_netdrv.c:136
vk_netdrv_feature_t
Definition vsf_netdrv.h:49
@ VSF_NETDRV_FEATURE_THREAD
Definition vsf_netdrv.h:50
void vsf_pnp_on_netdrv_disconnect(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:53
void vsf_pnp_on_netdrv_new(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:41
void * vk_netdrv_get_netif(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:125
vsf_err_t vk_netdrv_connect(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:149
void vk_netdrv_prepare(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:142
void vk_netdrv_set_netlink_op(vk_netdrv_t *netdrv, const vk_netlink_op_t *netlink_op, void *param)
Definition vsf_netdrv.c:178
void vk_netdrv_disconnect(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:166
vk_netdrv_feature_t vk_netdrv_feature(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:101
void vsf_pnp_on_netdrv_connected(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:50
void vsf_pnp_on_netdrv_del(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:44
void vsf_pnp_on_netdrv_prepare(vk_netdrv_t *netdrv)
Definition vsf_netdrv.c:47
#define __VSF_NETDRV_CLASS_INHERIT_NETLINK__
Definition vsf_netdrv_wpcap.c:24