source: EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_igmp.h@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr
File size: 5.9 KB
Line 
1/*
2 * TINET (TCP/IP Protocol Stack)
3 *
4 * Copyright (C) 2001-2012 by Dep. of Computer Science and Engineering
5 * Tomakomai National College of Technology, JAPAN
6 *
7 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚©CFree Software Foundation
8 * ‚É‚æ‚Á‚ÄŒö•\‚³‚ê‚Ä‚¢‚é GNU General Public License ‚Ì Version 2 ‚É‹L
9 * q‚³‚ê‚Ä‚¢‚éðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒFƒAi–{ƒ\ƒtƒgƒEƒFƒA
10 * ‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏEÄ”z•ziˆÈ‰ºC
11 * —˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
12 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
13 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
14 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
15 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
16 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
17ƒƒ“ƒgi—˜—p
18 * ŽÒƒ}ƒjƒ…
19ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
20 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
21 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
22 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
23 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
24ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
25ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
26 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
27 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
28 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
29 *
30 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
31 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC‚»‚Ì“K—p‰Â”\«‚à
32 * ŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼
33 * Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
34 *
35 * @(#) $Id$
36 */
37
38#ifndef _IP_IGMP_H_
39#define _IP_IGMP_H_
40
41#define NUM_IGMP_ENTRY 5 /* ƒ}ƒ‹ƒ`ƒLƒƒƒXƒgƒOƒ‹[ƒv‚̃Gƒ“ƒgƒŠ” */
42
43#ifdef __CA850__
44#pragma pack(1)
45#elif __RX
46#pragma pack
47#elif _MSC_VER
48#pragma pack(push, 1)
49#endif
50
51 /*
52 * IGMPv1 ƒwƒbƒ_‚Ì’è‹`ARFC 1112
53 */
54
55typedef struct t_igmpv1_hdr
56{
57 uint8_t type; /* ƒƒbƒZ[ƒW‚ÌŒ^ */
58 uint8_t unused; /* –¢Žg—p */
59 uint16_t sum; /* ƒ`ƒFƒbƒNƒTƒ€ */
60 T_IN4_ADDR addr; /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
61} T_IGMPV1_HDR;
62
63/*
64* IGMPv2 ƒwƒbƒ_‚Ì’è‹`ARFC 2236
65*/
66
67typedef struct t_igmpv2_hdr
68{
69 uint8_t type; /* ƒƒbƒZ[ƒW‚ÌŒ^ */
70 uint8_t time; /* Å‘剞“šŽžŠÔ */
71 uint16_t sum; /* ƒ`ƒFƒbƒNƒTƒ€ */
72 T_IN4_ADDR addr; /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
73} T_IGMPV2_HDR;
74
75typedef struct t_igmpv3_query_hdr
76{
77 uint8_t type; /* ƒƒbƒZ[ƒW‚ÌŒ^ */
78 uint8_t time; /* Å‘剞“šŽžŠÔ */
79 uint16_t sum; /* ƒ`ƒFƒbƒNƒTƒ€ */
80 T_IN4_ADDR grpaddr; /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
81 uint8_t sqrv; /* Sƒtƒ‰ƒOAQuerier Robustness Value */
82 uint8_t qqic; /* Qurier's Query Interval Code */
83 uint16_t num; /* ‘—MŒ³‚̐” */
84 T_IN4_ADDR sdraddr; /* ‘—MŒ³ƒAƒhƒŒƒX */
85} T_IGMPV3Q_HDR;
86
87typedef struct t_igmp_group_record
88{
89 uint8_t type; /* ƒƒbƒZ[ƒW‚ÌŒ^ */
90 uint8_t len; /* •â•ƒf[ƒ^’· */
91 uint16_t num; /* ‘—MŒ³‚̐” */
92 T_IN4_ADDR grpaddr; /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
93 T_IN4_ADDR sdraddr; /* ‘—MŒ³ƒAƒhƒŒƒX */
94 /* •â•ƒf[ƒ^ */
95} T_IGMP_GROUP_RECORD;
96
97typedef struct t_igmpv3_report_hdr
98{
99 uint8_t type; /* ƒƒbƒZ[ƒW‚ÌŒ^ */
100 uint8_t rsv1; /* —\–ñ */
101 uint16_t sum; /* ƒ`ƒFƒbƒNƒTƒ€ */
102 uint16_t rsv2; /* —\–ñ */
103 uint16_t num; /* ƒOƒ‹[ƒvƒŒƒR[ƒh‚̐” */
104 T_IGMP_GROUP_RECORD record; /* ƒOƒ‹[ƒvƒŒƒR[ƒh */
105} T_IGMPV3R_HDR;
106
107#ifdef __CA850__
108#pragma pack(8)
109#elif __RX
110#pragma unpack
111#elif _MSC_VER
112#pragma pack(pop)
113#endif
114
115#define IGMP_HDR_SIZE (sizeof(T_IGMPV1_HDR))
116#define IP4_IGMP_HDR_SIZE (IP4_HDR_SIZE + IGMP_HDR_SIZE)
117#define IF_IP4_IGMP_HDR_SIZE (IF_IP4_HDR_SIZE + IGMP_HDR_SIZE)
118#define IF_IP4_IGMP_HDR_OFFSET (IF_IP4_HDR_SIZE)
119
120#define GET_IGMPV1_HDR(nbuf,ihoff) ((T_IGMPV1_HDR*)((uint8_t*)((nbuf)->buf) + ihoff))
121#define GET_IGMPV2_HDR(nbuf,ihoff) ((T_IGMPV2_HDR*)((uint8_t*)((nbuf)->buf) + ihoff))
122#define GET_IGMPV3Q_HDR(nbuf,ihoff) ((T_IGMPV3Q_HDR*)((uint8_t*)((nbuf)->buf) + ihoff))
123#define GET_IGMPV3R_HDR(nbuf,ihoff) ((T_IGMPV3R_HDR*)((uint8_t*)((nbuf)->buf) + ihoff))
124#define GET_IGMP_SDU(nbuf,ihoff) ((uint8_t*)((nbuf)->buf) + ihoff + IGMP_HDR_SIZE)
125
126/*
127* ƒƒbƒZ[ƒW‚ÌŒ^
128*/
129
130#define IGMP_MEMBERSHIP_QUERY 0x11 /* ƒƒ“ƒo[ƒVƒbƒvƒNƒGƒŠ[ */
131#define IGMP_MEMBERSHIP_REPORT 0x12 /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg */
132#define IGMP_MEMBERSHIP_REPORT_V2 0x16 /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg */
133#define IGMP_LEAVE_GROUP 0x17 /* ƒŠ[ƒuƒOƒ‹[ƒv */
134#define IGMP_MEMBERSHIP_REPORT_V3 0x22 /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg */
135
136/*
137* UDP’ʐM’[“_ƒIƒvƒVƒ‡ƒ“
138*/
139
140typedef struct ip_mreq
141{
142 T_IN4_ADDR imr_multiaddr; /* IP multicast address of group */
143 T_IN4_ADDR imr_interface; /* local IP address of interface */
144} T_IP_MREQ;
145
146typedef struct ip_msfilter
147{
148 T_IN4_ADDR imsf_multiaddr; /* IP multicast group address */
149 T_IN4_ADDR imsf_interface; /* IP address of local interface */
150 uint32_t imsf_fmode; /* Filter-mode */
151 uint32_t imsf_numsrc; /* Number of sources in the following array */
152 T_IN4_ADDR imsf_slist[1]; /* Array of source addresses */
153} T_IP_MSFILTER;
154
155#define MCAST_INCLUDE 1
156#define MCAST_EXCLUDE 2
157
158extern ER igmp_set_loop(T_UDP_CEP *cep, uint8_t optval);
159extern ER igmp_get_loop(T_UDP_CEP *cep, uint8_t *optval);
160extern ER igmp_set_ttl(T_UDP_CEP *cep, uint8_t optval);
161extern ER igmp_get_ttl(T_UDP_CEP *cep, uint8_t *optval);
162extern ER igmp_set_if(T_UDP_CEP *cep, T_IN4_ADDR *optval);
163extern ER igmp_get_if(T_UDP_CEP *cep, T_IN4_ADDR *optval);
164extern ER igmp_add_membership(T_UDP_CEP *cep, T_IP_MREQ *optval);
165extern ER igmp_drop_membership(T_UDP_CEP *cep, T_IP_MREQ *optval);
166extern ER igmp_set_ip_msfilter(T_UDP_CEP *cep, const T_IP_MSFILTER *optval);
167extern ER igmp_get_ip_msfilter(T_UDP_CEP *cep, T_IP_MSFILTER *optval);
168
169/*
170 * IGMP ƒOƒ‹[ƒvƒGƒ“ƒgƒŠ
171 */
172
173typedef struct igmp_entry
174{
175 uint16_t timer; /* ‘—M‚Ü‚Å‚ÌŽžŠÔ[•b] */
176 uint16_t resptime; /* Å‘剞“šŽžŠÔ[•b] */
177 T_IN4_ADDR ip_addr; /* IP ƒAƒhƒŒƒX */
178} T_IGMP_ENTRY;
179
180extern void igmp_init(void);
181extern bool_t igmp_is_joined_group(T_IN4_ADDR addr);
182extern uint_t igmp_input(T_NET_BUF **inputp, uint_t *offp, uint_t *nextp);
183
184#endif /* of #ifndef _IP_IGMP_H_ */
Note: See TracBrowser for help on using the repository browser.