📄 hal_net_dev.h
字号:
#ifndef __HAL_NET_DEV_H__
#define __HAL_NET_DEV_H__
#include "../pub/hal_llist.h"
#include "hal_dev_llist.h"
#include "../pub/hal_types.h"
extern hal_llist hal_net_dev_list;
typedef struct __hal_net_dev hal_net_dev;
typedef hal_net_dev hal_net_fd;
typedef hal_net_dev* (*hal_net_open)( hal_net_dev* net_dev, const char* name );
typedef int (*hal_net_close)( hal_net_dev* net_dev);
typedef int (*hal_net_send)( hal_net_dev* net_dev, mbuf* pkg);
typedef int (*hal_net_rcv)( hal_net_dev* net_dev, mbuf* pkg);
typedef int (*hal_set_mac_addr)( hal_net_dev* net_dev, const hal_u8* mac_addr);
typedef int (*hal_set_dlci)( hal_net_dev* net_dev, const hal_u16* dlci);
/* 网络设备结构,描述了网络类设备的公有特性及操作方法 */
typedef struct __hal_net_dev
{
hal_llist llist;
const char* name;
void* base_addr; /* address pointer */
hal_net_open open; /* function pointer */
hal_net_close close; /* function pointer */
hal_net_send send_pkg; /* function pointer */
hal_net_rcv rcv_pkg; /* function pointer */
void* dev_spec; /* struct variable pointer */
} hal_net_dev;
/* 以太网器件私有的结构,与hal_net_dev结构一起描述一个以太网器件 */
typedef struct __eth_dev_spec
{
hal_set_mac_addr set_mac_addr; /* 设置链路层地址 */
hal_u8 mac_addr[6]; /*链路层地址 */
} eth_dev_spec;
/* 帧中v继端口设备私有结构,与hal_net_dev结构一起描述一个以太网器件 */
typedef struct __fr_dev_spec
{
hal_set_dlci set_dlci;
hal_u16 dlci[10]; /* 预置的10个dlci,在上层不指定DLCI的时候,随机使用 */
hal_u8 port;
} fr_dev_spec;
static int hal_net_dev_reg( hal_net_fd* fd)
{
return hal_dev_llist_insert ((hal_dev_llist*) fd, &hal_net_dev_list);
}
///* 用于定义一个新的帧中继类型网络设备结构变量的宏 *
// * 使用本宏定义一个设备变量的好处是可以自动初始化 *
// * 设备结构变量中相关的内容 *
// */
//#define NEW_FR_DEV(dev_name, set_dlci_func, /
// used_port, open_func, /
// send_func /
// ) /
// hal_fr_dev_spec dev_name##_spec = /
// { /
// set_dlci_func, /
// {0,1,2,3,4,5,6,7,8,9}, /
// used_port /
// }; /
// /
// hal_net_dev dev_name = /
// { /
// { NULL, NULL }, /
// dev_name##_NAME, /
// dev_name##_BASE, /
// open_func, /
// close_func, /
// send_func /
// NULL, /
// &dev_name##_spec /
//
// };
//
///* 用于定义一个新的以太网类型网络设备结构变量的宏 *
// * 使用本宏定义一个设备变量的好处是可以自动初始化 *
// * 设备结构变量中相关的内容 *
// */
//#define NEW_ETH_DEV(dev_name, set_mac_addr_func, /
// used_port, open_func, /
// send_func /
// ) /
// hal_fr_dev_spec dev_name##_spec = /
// { /
// set_mac_addr_func /
// }; /
// /
// hal_net_dev dev_name = /
// { /
// { NULL, NULL }, /
// dev_name##_NAME, / /* name of the deviec */
// dev_name##_BASE, / /* base address of the device */
// (hal_net_open)open_func, / /* hal_net_open() */
// close_func, / /* hal_net_close() */
// send_func / /* hal_net_send() */
// NULL, / /* hal_net_rcv() */
// &dev_name##_spec /
// };
#endif /* __HAL_NET_DEV_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -