RXduino  1.20a
RXduinoマニュアル 最終更新日 平成26年6月29日
tkdnip.h
説明を見る。
1 /*******************************************************************************
2 * RXduinoライブラリ & 特電HAL
3 *
4 * このソフトウェアは特殊電子回路株式会社によって開発されたものです。
5 * 当社Webサイトを通じてダウンロードすることによって使用許諾されます。
6 * このファイルを第三者へ開示・再配布・貸与・譲渡することはできません。
7 * このソフトウェアはあるがままの状態で提供され、内容および動作についての保障はあ
8 * りません。弊社はファイルの内容および実行結果についていかなる責任も負いません。
9 * お客様は、お客様の製品開発のために当ソフトウェアのソースコードを自由に参照し、
10 * 引用していただくことができます。
11 * コンパイル・リンク後のオブジェクトファイル(ELF ファイルまたはMOT,SRECファイル)
12 * であって、デバッグ情報が削除されている場合は第三者に再配布することができます。
13 * (C) Copyright 2011-2014 TokushuDenshiKairo Inc. 特殊電子回路株式会社
14 * http://rx.tokudenkairo.co.jp/
15 *******************************************************************************/
16 
17 #ifndef H_TKDNIP
18 #define H_TKDNIP
19 /**************************************************************************/
26 // 特電HAL
27 #include "tkdn_hal.h"
28 
29 #ifndef BOOL
30  #define BOOL int
31 #endif
32 
33 #ifdef __cplusplus
34  extern "C" {
35 #endif
36 
37 /*********************************************************************/
40 typedef enum {
41  LINK_DOWN = 0,
42  LINK_UP = 1,
45 } LINK_STATE;
46 
47 
48 /*********************************************************************/
51 typedef enum {
57 
58 /*********************************************************************/
61 typedef enum {
62 
63  DNS_A = 1,
64  DNS_NS = 2,
65  DNS_CNAME = 5,
66  DNS_PTR = 12,
67  DNS_MX = 15,
68  DNS_AAAA = 28,
69  DNS_ANY = 255,
70 } DNS_TYPE;
71 
72 /*********************************************************************/
75 typedef enum {
76  DNS_UNKN = 0,
77  DNS_IN = 1,
78 } DNS_CLASS;
79 
80 /****************************************************************
81 * @brief DNSの結果レコードが格納される構造体。
82 * @details dns_records_t 型に含まれるフィールドで用いられる
83 * ユーザアプリで詳細なDNS情報を使う場合に使用する。
84 ****************************************************************/
85 typedef struct dns_record_t
86 {
87  DNS_REPLY_TYPE rtype;
88  DNS_TYPE type;
89  DNS_CLASS aclass;
90  int ttl;
91  char *name;
92  unsigned char *data;
93 } dns_record_t;
94 
95 
96 /****************************************************************
97 * @brief DNSの結果が格納される構造体 dns_record_t の配列を格納するための構造体
98 * @details tketh_nslookup_ex() の戻り値で使われる
99 * @note この構造体が不要になったときには、 tketh_free_dns_records() で開放すること。
100 ****************************************************************/
101 typedef struct dns_records_t
102 {
103  int num_of_records;
104  dns_record_t **record;
105 } dns_records_t;
106 
107 /****************************************************************
108 * @def UDP_HANDLE_FUNC
109 * @brief UDPを受信したときに呼び出されるユーザ関数
110 * @details この関数がTRUEを返すとユーザで処理したものと解釈され、システムでは処理されない。<BR>
111 * この関数がFALSEを返すとシステムでは処理される。<BR>
112 * @note この関数が呼び出されるとき、ポート番号とデータ長はリトルエンディアンになっている<BR>
113 ****************************************************************/
114 typedef BOOL (*UDP_HANDLE_FUNC)(
115  unsigned char dest_ip[4],
116  unsigned char src_ip[4],
117  unsigned short dest_port,
118  unsigned short src_port,
119  unsigned char *data, // UDPパケットのデータ部
120  short datalen // UDPパケットのデータの長さ(ヘッダは含まない)
121 );
122 
124 typedef struct tcp_str tcp_t;
125 typedef struct tcp_server_str tcp_server_t;
126 
128 typedef enum {
140 } TCP_STATE;
141 
142 // クライアントの接続状態を示す構造体。 clients_stat_t のメンバとして使われる
143 typedef struct client_stat_t
144 {
145  unsigned char ipaddr[4]; // @brief クライアントIPアドレス
146  unsigned short local_port; // @brief ローカルポート番号
147  unsigned short foreign_port; // @brief 相手先ポート番号
148  BOOL server; // @brief 自分がサーバかどうか
149  TCP_STATE state; // @brief TCPの状態
150 } client_stat_t;
151 
152 // クライアントの接続状態を示す構造体のリスト。 tketh_get_client_stats() の結果として返される。
153 typedef struct clients_stat_t
154 {
155  int num_of_clients; // 接続しているクライアントの数
156  client_stat_t *clients; // 接続クライアント情報
157 } clients_stat_t;
158 
160 typedef void (*FUNCTYPE_TCPEVENT)(tcp_t *client);
161 
163 // ユーザ公開関数
165 
166 //------------------------------------------------------------------------
167 // 基本的な操作
168 //------------------------------------------------------------------------
169 
170 /*********************************************************************/
175 void tketh_open(unsigned char *macaddr);
176 
177 /*********************************************************************/
187 
188 /*********************************************************************/
196 void tketh_process();
197 
198 /*********************************************************************/
206 void tketh_debug(int level);
207 
208 /*********************************************************************/
214 void tketh_set_hostname(const char *hostname);
215 
216 /*********************************************************************/
223 char *tketh_get_hostname(void);
224 
225 /*********************************************************************/
230 void tketh_change_macaddr(const unsigned char macaddr[6]);
231 
232 /*********************************************************************/
239 void tketh_get_macaddr(unsigned char macaddr[6]);
240 
241 //------------------------------------------------------------------------
242 // IPアドレス等の設定や取得
243 //------------------------------------------------------------------------
244 
245 /*********************************************************************/
249 BOOL tketh_dhcpc(void);
250 
251 /*********************************************************************/
257 void tketh_set_myipaddr(unsigned char ipaddr[4],unsigned char mask[4]);
258 
259 /*********************************************************************/
267 void tketh_get_myipaddr(unsigned char ipaddr[4],unsigned char mask[4]);
268 
269 /*********************************************************************/
274 void tketh_set_gateway(unsigned char ipaddr[4]);
275 
276 /*********************************************************************/
283 void tketh_get_gateway(unsigned char ipaddr[4]);
284 
285 /*********************************************************************/
290 void tketh_set_nameserver(unsigned char ipaddr[4]);
291 
292 /*********************************************************************/
299 void tketh_get_nameserver(unsigned char ipaddr[4]);
300 
301 /*********************************************************************/
306 void tketh_arp_table_show();
307 
308 //------------------------------------------------------------------------
309 // 低レベルなパケットの送受信
310 //------------------------------------------------------------------------
311 
312 /*********************************************************************/
322 BOOL tketh_send_udp(unsigned char tgtaddr[4],unsigned short dest_port,unsigned short src_port,unsigned char *buf,int len);
323 
324 /*********************************************************************/
329 void tketh_regist_udp_handler(UDP_HANDLE_FUNC func);
330 
331 //------------------------------------------------------------------------
332 // PING関係のプロトコル
333 //------------------------------------------------------------------------
334 
335 /*********************************************************************/
342 BOOL tketh_send_ping(unsigned char ipaddr[4],unsigned char *buf,int len);
343 
344 /*********************************************************************/
349 BOOL tketh_is_ping_running();
350 
351 /*********************************************************************/
356 void tketh_cancel_ping();
357 
358 /*********************************************************************/
362 unsigned long tketh_ping_starttime();
363 
364 //------------------------------------------------------------------------
365 // 名前解決
366 //------------------------------------------------------------------------
367 
368 /*********************************************************************/
374 BOOL tketh_nslookup(char *hostname,unsigned char ipaddr[4]);
375 
376 /*********************************************************************/
384 dns_records_t *tketh_nslookup_ex(char *hostname);
385 
386 /*********************************************************************/
392 void tketh_free_dns_records(dns_records_t *dnsrec);
393 
394 /*********************************************************************/
402 BOOL tketh_ip_to_hostname(unsigned char ipaddr[4],char *hostname,int hostname_maxlen);
403 
404 //------------------------------------------------------------------------
405 // TCPクライアント
406 //------------------------------------------------------------------------
407 
408 /*********************************************************************/
414 tcp_t *tketh_tcp_connect(unsigned char ipaddr[4],unsigned short dest_port);
415 
416 /*********************************************************************/
421 BOOL tketh_tcp_is_connected(tcp_t *info);
422 
423 /*********************************************************************/
430 void tketh_tcp_fin(tcp_t *info);
431 
432 /*********************************************************************/
439 char *tketh_tcp_state(tcp_t *info);
440 
441 /*********************************************************************/
447 void tketh_tcp_senddata(tcp_t *info,unsigned char *data,int len);
448 
449 /*********************************************************************/
455 int tketh_tcp_recvcount(tcp_t *info);
456 
457 /*********************************************************************/
464 int tketh_tcp_recvdata(tcp_t *info,unsigned char *data,int len);
465 
466 //------------------------------------------------------------------------
467 // TCPサーバ ※現在はセッションを1つしか張れない
468 //------------------------------------------------------------------------
469 
470 /*********************************************************************/
478 tcp_t *tketh_tcp_open_server(unsigned short port,FUNCTYPE_TCPEVENT func);
479 
480 /*********************************************************************/
486 BOOL tketh_tcp_listen(tcp_t *info);
487 
488 /*********************************************************************/
494 unsigned char *tketh_tcp_target_addr(tcp_t *info);
495 
496 /*********************************************************************/
503 
504 //------------------------------------------------------------------------
505 // コネクション管理
506 //------------------------------------------------------------------------
507 
508 /*********************************************************************/
513 clients_stat_t *tketh_get_client_stats();
514 
515 /*********************************************************************/
520 void tketh_tcp_set_rbuf_length(unsigned short len);
521 
522 void tketh_debug_push(int len,unsigned char *buf,int isSend);
523 BOOL tketh_debug_pop(int *len,unsigned char *buf,int *isSend);
524 int tketh_debug_count();
525 void tketh_debug_ethpacket(int len,char *buf,int isSend);
526 void packet_dump(unsigned char *buf,int len,int isSend);
527 
528 #ifdef __cplusplus
529  }
530 #endif
531 
532 #endif
clients_stat_t * tketh_get_client_stats()
クライアントの状態を調べる
void tketh_regist_udp_handler(UDP_HANDLE_FUNC func)
UDPを受信したときにコールバックされる関数を登録する
リンクが接続された
Definition: tkdnip.h:44
LISTEN サーバが接続を待っている
Definition: tkdnip.h:130
TCP_STATE
TCPの接続状態を表す定数
Definition: tkdnip.h:128
リンクダウン
Definition: tkdnip.h:41
void tketh_tcp_fin(tcp_t *info)
コネクションの穏やかな終了
void tketh_tcp_set_rbuf_length(unsigned short len)
TCPの受信バッファの長さを設定する
BOOL tketh_dhcpc(void)
DHCPを実行して、IPアドレス、GW、DNSサーバを設定する
BOOL tketh_is_ping_running()
PINGが実行中かどうか調べる
void tketh_set_myipaddr(unsigned char ipaddr[4], unsigned char mask[4])
自分のIPアドレスを設定する
別名
Definition: tkdnip.h:65
追加情報
Definition: tkdnip.h:54
不明
Definition: tkdnip.h:76
void tketh_get_macaddr(unsigned char macaddr[6])
自分のMACアドレスを調べる
SYN_SENT SYNを送った。サーバからのACK待ち
Definition: tkdnip.h:137
インターネットアドレス
Definition: tkdnip.h:77
char * tketh_tcp_state(tcp_t *info)
コネクションの状態を文字列で返す
void tketh_debug(int level)
デバッグレベルを設定する
FIN_WAIT2 相手からのFINを待っている
Definition: tkdnip.h:134
DNS_REPLY_TYPE
DNSの応答のタイプ
Definition: tkdnip.h:51
ネームサーバ
Definition: tkdnip.h:64
int tketh_tcp_recvdata(tcp_t *info, unsigned char *data, int len)
受信バッファからデータを取り出す
BOOL tketh_tcp_listen(tcp_t *info)
サーバの受信開始
ノンオーソリティ
Definition: tkdnip.h:52
dns_records_t * tketh_nslookup_ex(char *hostname)
DNSサーバにアクセスして名前解決を行い、すべてのレコードを得る
ESTABLISHED 通信が確立している
Definition: tkdnip.h:132
void tketh_get_myipaddr(unsigned char ipaddr[4], unsigned char mask[4])
自分のIPアドレスを取得する
void tketh_tcp_server_terminate(tcp_t *info)
サーバの待ち受け状態を終了する
DNS_CLASS
DNSのアドレスのタイプ
Definition: tkdnip.h:75
char * tketh_get_hostname(void)
自分の名前を調べる
void tketh_tcp_senddata(tcp_t *info, unsigned char *data, int len)
TCPの接続先にデータを送信する
逆引き
Definition: tkdnip.h:66
void tketh_get_gateway(unsigned char ipaddr[4])
設定されているデフォルトゲートウェイのアドレスを取得する
void tketh_cancel_ping()
PINGの実行をキャンセルする
メールサーバ
Definition: tkdnip.h:67
unsigned long tketh_ping_starttime()
最後にPINGを送った時刻をus単位で返す
LAST_ACK.
Definition: tkdnip.h:139
リンクアップ
Definition: tkdnip.h:42
unsigned char * tketh_tcp_target_addr(tcp_t *info)
接続先のIPアドレスを調べる
void tketh_change_macaddr(const unsigned char macaddr[6])
MACアドレスを変更する
void tketh_process()
イーサネットの受信処理を進める
FIN_WAIT1 相手からのFINを待っている
Definition: tkdnip.h:133
void tketh_set_nameserver(unsigned char ipaddr[4])
DNSサーバのアドレスを設定する
全部
Definition: tkdnip.h:69
struct tcp_str tcp_t
TCPの接続情報を示す構造体 内部構造は知る必要はないため隠蔽されている
Definition: tkdnip.h:124
CLOSE_WAIT.
Definition: tkdnip.h:138
void tketh_open(unsigned char *macaddr)
自分のMACアドレスを設定し、ライブラリを開始する
BOOL tketh_nslookup(char *hostname, unsigned char ipaddr[4])
DNSサーバにアクセスして名前解決を行う
TIME_WAIT クライアントからCLOSEされた後の待ち
Definition: tkdnip.h:136
BOOL tketh_send_udp(unsigned char tgtaddr[4], unsigned short dest_port, unsigned short src_port, unsigned char *buf, int len)
UDPを送信する
void tketh_free_dns_records(dns_records_t *dnsrec)
DNS結果構造体を開放する
不明
Definition: tkdnip.h:55
BOOL tketh_send_ping(unsigned char ipaddr[4], unsigned char *buf, int len)
PINGを送信する
BOOL tketh_tcp_is_connected(tcp_t *info)
コネクションが接続中かどうかを調べる
SYN_RCVD SYNを受信した
Definition: tkdnip.h:131
void(* FUNCTYPE_TCPEVENT)(tcp_t *client)
TCPのイベントが起きた時にコールバックされる関数の型
Definition: tkdnip.h:160
IPv6アドレス
Definition: tkdnip.h:68
IPv4 アドレス
Definition: tkdnip.h:63
void tketh_set_hostname(const char *hostname)
自分の名前を設定する
リンクが切断された
Definition: tkdnip.h:43
tcp_t * tketh_tcp_connect(unsigned char ipaddr[4], unsigned short dest_port)
TCPでサーバに接続する
LINK_STATE tketh_check_link()
イーサネットのリンクアップをチェックする。
void tketh_set_gateway(unsigned char ipaddr[4])
デフォルトゲートウェイを設定する
tcp_t * tketh_tcp_open_server(unsigned short port, FUNCTYPE_TCPEVENT func)
TCP接続を待ちうけたいポート番号をセットする
CLOSING FINを送ったらFINを送り返された
Definition: tkdnip.h:135
BOOL tketh_ip_to_hostname(unsigned char ipaddr[4], char *hostname, int hostname_maxlen)
DNSサーバにアクセスしてIPアドレスから名前を調べる
int tketh_tcp_recvcount(tcp_t *info)
受信バッファに溜まっているデータの量を調べる
CLOSED 接続は閉じている
Definition: tkdnip.h:129
void tketh_arp_table_show()
ARPのテーブルを表示する
特電HALのヘッダファイル
オーソリティ
Definition: tkdnip.h:53
void tketh_get_nameserver(unsigned char ipaddr[4])
設定されているDNSサーバのアドレスを取得する
DNS_TYPE
DNSのレコードのタイプ
Definition: tkdnip.h:61
LINK_STATE
リンクの状態
Definition: tkdnip.h:40