[388] | 1 | /*
|
---|
[389] | 2 | * TOPPERS PROJECT Home Network Working Group Software
|
---|
[388] | 3 | *
|
---|
[400] | 4 | * Copyright (C) 2018-2019 Cores Co., Ltd. Japan
|
---|
[388] | 5 | *
|
---|
| 6 | * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
|
---|
| 7 | * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
---|
| 8 | * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
---|
| 9 | * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
---|
| 10 | * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
---|
| 11 | * スコード中に含まれていること.
|
---|
| 12 | * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
---|
| 13 | * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
---|
| 14 | * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
---|
| 15 | * の無保証規定を掲載すること.
|
---|
| 16 | * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
---|
| 17 | * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
---|
| 18 | * と.
|
---|
| 19 | * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
---|
| 20 | * 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
| 21 | * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
---|
| 22 | * 報告すること.
|
---|
| 23 | * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
---|
| 24 | * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
---|
| 25 | * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
---|
| 26 | * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
---|
| 27 | * 免責すること.
|
---|
| 28 | *
|
---|
| 29 | * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
---|
| 30 | * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
---|
| 31 | * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
---|
| 32 | * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
---|
| 33 | * の責任を負わない.
|
---|
| 34 | *
|
---|
| 35 | * @(#) $Id$
|
---|
| 36 | */
|
---|
| 37 |
|
---|
| 38 | #ifndef _NTP_CLI_H_
|
---|
| 39 | #define _NTP_CLI_H_
|
---|
| 40 |
|
---|
| 41 | /* スタックサイズ */
|
---|
| 42 |
|
---|
| 43 | #define NTP_CLI_STACK_SIZE 1024 /* NTP クライアントタスク(IPv4)のスタックサイズ */
|
---|
| 44 |
|
---|
| 45 | /* 優先度 */
|
---|
| 46 |
|
---|
| 47 | #define NTP_CLI_MAIN_PRIORITY 5 /* NTP クライアントタスク(IPv4)の優先度 */
|
---|
| 48 |
|
---|
| 49 | /* タスク */
|
---|
| 50 |
|
---|
| 51 | extern void ntp_cli_task(intptr_t exinf);
|
---|
| 52 |
|
---|
| 53 | /* NTPタイムスタンプ */
|
---|
| 54 | typedef struct ntp_timestamp {
|
---|
| 55 | uint32_t integer;
|
---|
| 56 | uint32_t fraction;
|
---|
| 57 | } __attribute__((packed)) T_NTP_TIMESTAMP;
|
---|
| 58 |
|
---|
| 59 | /* NTPパケット */
|
---|
| 60 | typedef struct ntp_msg {
|
---|
| 61 | uint8_t mode : 3;
|
---|
| 62 | uint8_t version_number : 3;
|
---|
| 63 | uint8_t leap_indicator : 2;
|
---|
| 64 | uint8_t stratum;
|
---|
| 65 | uint8_t poll;
|
---|
| 66 | uint8_t precision;
|
---|
| 67 | uint32_t root_delay;
|
---|
| 68 | uint32_t root_dispersion;
|
---|
| 69 | uint8_t reference_identifier[4];
|
---|
| 70 | T_NTP_TIMESTAMP reference_timestamp;
|
---|
| 71 | T_NTP_TIMESTAMP originate_timestamp;
|
---|
| 72 | T_NTP_TIMESTAMP receive_timestamp;
|
---|
| 73 | T_NTP_TIMESTAMP transmit_timestamp;
|
---|
| 74 | uint8_t key_identifier[4];
|
---|
| 75 | uint8_t message_digest[16];
|
---|
| 76 | } __attribute__((packed)) T_NTP_MSG;
|
---|
| 77 |
|
---|
| 78 | typedef enum ntp_mode {
|
---|
| 79 | NTP_MODE_RESERVED,
|
---|
| 80 | NTP_MODE_SYMMETRIC_ACTIVE,
|
---|
| 81 | NTP_MODE_SYMMETRIC_PASSIVE,
|
---|
| 82 | NTP_MODE_CLIENT,
|
---|
| 83 | NTP_MODE_SERVER,
|
---|
| 84 | NTP_MODE_BROADCAST,
|
---|
| 85 | NTP_MODE_NTP_CONTROL_MESSAGE,
|
---|
| 86 | NTP_MODE_RESERVED_FOR_PRIVATE_USER
|
---|
| 87 | } ntp_mode_t;
|
---|
| 88 |
|
---|
| 89 | /* NTPクライアント状態 */
|
---|
| 90 | typedef enum ntp_cli_state {
|
---|
| 91 | NTP_CLI_STATE_ASYNC,
|
---|
| 92 | NTP_CLI_STATE_RESOLVE_ADDR,
|
---|
| 93 | NTP_CLI_STATE_REQUEST,
|
---|
| 94 | NTP_CLI_STATE_SYNC,
|
---|
| 95 | } ntp_cli_state_t;
|
---|
| 96 |
|
---|
| 97 | typedef struct ntp_cli {
|
---|
| 98 | ntp_cli_state_t state;
|
---|
| 99 | int timer;
|
---|
| 100 | int retry;
|
---|
| 101 | #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
|
---|
| 102 | T_IN6_ADDR ipaddr6;
|
---|
| 103 | #endif
|
---|
| 104 | uint16_t portno;
|
---|
| 105 | ID tskid;
|
---|
| 106 | ID cepid;
|
---|
| 107 | T_NTP_MSG ntp_msg;
|
---|
| 108 | T_IPV4EP snd_rmt;
|
---|
| 109 | T_IPV4EP rcv_rmt;
|
---|
| 110 | uint8_t poll;
|
---|
| 111 | T_NTP_TIMESTAMP reference_timestamp;
|
---|
| 112 | T_NTP_TIMESTAMP originate_timestamp;
|
---|
| 113 | T_NTP_TIMESTAMP receive_timestamp;
|
---|
| 114 | T_NTP_TIMESTAMP transmit_timestamp;
|
---|
| 115 | T_NTP_TIMESTAMP recv_resp_timestamp;
|
---|
| 116 | char buf[30];
|
---|
| 117 | int rcv_flag;
|
---|
| 118 | int exe_flag;
|
---|
| 119 | } T_NTP_CLI_CONTEXT;
|
---|
| 120 |
|
---|
| 121 | /* 関数 */
|
---|
| 122 |
|
---|
| 123 | void ntp_cli_initialize(T_NTP_CLI_CONTEXT *nc, ID cepid);
|
---|
| 124 | int ntp_cli_get_timer(T_NTP_CLI_CONTEXT *nc);
|
---|
| 125 | void ntp_cli_progress(T_NTP_CLI_CONTEXT *nc, TMO elapse);
|
---|
| 126 | void ntp_cli_wakeup(T_NTP_CLI_CONTEXT *nc);
|
---|
| 127 | void ntp_cli_timeout(T_NTP_CLI_CONTEXT *nc);
|
---|
| 128 | ER callback_nblk_ntp_cli(ID cepid, FN fncd, void *p_parblk);
|
---|
| 129 |
|
---|
| 130 | void ntp_cli_execute();
|
---|
| 131 |
|
---|
| 132 | #endif /* of #ifndef _NTP_CLI_H_ */
|
---|