#ifndef __RAW_SOCK_H
#define __RAW_SOCK_H


#include <net/ethernet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "api.h"


typedef struct _RAW_SOCK
{
	char *ifname;							/* 网络接口名称 */
	int sock;							/* 套接字 */
	int len;							/* 数据长度 */
	char *channel_name;					//这个名称会用来用作唯一作为协议通道的区分 相当于协议类型解析的一个标识  一组收发要保证此处一致
	char smac_hex[MAC_HEX_LEN];
	char dmac_hex[MAC_HEX_LEN];
	char send_buffer[RAW_PACKET_LEN_MAX];	/* 数据缓存；原始套接字一次仅支持发一个以太网帧 */
	char rcv_buffer[RAW_PACKET_LEN_MAX];	/* 数据缓存；原始套接字一次仅支持收一个以太网帧 */
} RAW_SOCK;

/* --------- 函数声明 ---------  */
int raw_socket_init(int prot, char *dev);
int set_socket_timeout_val(int socket, int type, int sec, int usec);
int raw_data_send(RAW_SOCK *raw);
int raw_data_recv(RAW_SOCK *raw);
int send_data_frame(RAW_SOCK *raw,char *data,int len);
RAW_SOCK *raw_config_init(char *ifname,char*channel_name);
int raw_config_deinit(RAW_SOCK *raw);
#endif //__RAW_SOCK_H
