#ifndef _PKTLIB_PKTBUF_H_INCLUDED_ #define _PKTLIB_PKTBUF_H_INCLUDED_ typedef struct _pktbuf *pktbuf_t; /* 初期設定 */ int pktbuf_init(int option_size); /* バッファの生成と消去 */ pktbuf_t pktbuf_create(int offset); pktbuf_t pktbuf_destroy(pktbuf_t pktbuf); pktbuf_t pktbuf_destroy_queue(pktbuf_t pktbuf); pktbuf_t pktbuf_clone(pktbuf_t pktbuf); pktbuf_t pktbuf_copy(pktbuf_t pktbuf); /* パラメータ取得・設定 */ pktbuf_t pktbuf_get_next(pktbuf_t pktbuf); struct timeval *pktbuf_get_time(pktbuf_t pktbuf); char *pktbuf_get_header(pktbuf_t pktbuf); int pktbuf_get_size(pktbuf_t pktbuf); int pktbuf_set_size(pktbuf_t pktbuf, int size); void *pktbuf_get_option(pktbuf_t pktbuf); /* 領域の拡張と削除 */ char *pktbuf_add_header(pktbuf_t pktbuf, int size); char *pktbuf_delete_header(pktbuf_t pktbuf, int size); int pktbuf_add_size(pktbuf_t pktbuf, int size); int pktbuf_delete_size(pktbuf_t pktbuf, int size); /* キュー操作 */ pktbuf_t pktbuf_enqueue(pktbuf_t *queue, pktbuf_t pktbuf); pktbuf_t pktbuf_dequeue(pktbuf_t *queue); /* pktifを使ったパケットの送受信 */ pktbuf_t pktbuf_create_default_offset(pktif_t pktif, int offset); pktbuf_t pktbuf_recv(pktif_t pktif, int offset); pktbuf_t pktbuf_send(pktif_t pktif, pktbuf_t pktbuf); pktbuf_t pktbuf_send_queue(pktif_t pktif, pktbuf_t pktbuf); /* チェックサム計算 */ pktbuf_t pktbuf_checksum_correct_ip(pktbuf_t pktbuf); pktbuf_t pktbuf_checksum_correct(pktbuf_t pktbuf); /* ヘッダの生成と解析 */ struct header_param { struct { int header_size; char src_macaddr[6]; char dst_macaddr[6]; int type; } ethernet; struct { int header_size; int id; int ttl; int protocol; unsigned int src_ipaddr; unsigned int dst_ipaddr; } ip; struct { int header_size; int src_port; int dst_port; } udp; }; pktbuf_t pktbuf_make_udp(pktbuf_t pktbuf, struct header_param *param); pktbuf_t pktbuf_make_ip(pktbuf_t pktbuf, struct header_param *param); pktbuf_t pktbuf_make_ethernet(pktbuf_t pktbuf, struct header_param *param); int pktbuf_analyze_udp(pktbuf_t pktbuf, struct header_param *param); int pktbuf_analyze_ip(pktbuf_t pktbuf, struct header_param *param); int pktbuf_analyze_ethernet(pktbuf_t pktbuf, struct header_param *param); #endif