Changeset 1d24ad3 in mainline for uspace/srv/net/inetsrv
- Timestamp:
- 2013-07-03T14:20:04Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d8b47eca
- Parents:
- 02a09ed
- Location:
- uspace/srv/net/inetsrv
- Files:
-
- 5 added
- 7 edited
-
Makefile (modified) (1 diff)
-
icmpv6.c (added)
-
icmpv6.h (added)
-
icmpv6_std.h (added)
-
inet_link.c (modified) (3 diffs)
-
inet_std.h (modified) (2 diffs)
-
inetping6.c (added)
-
inetping6.h (added)
-
inetsrv.c (modified) (4 diffs)
-
inetsrv.h (modified) (2 diffs)
-
pdu.c (modified) (4 diffs)
-
pdu.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/inetsrv/Makefile
r02a09ed r1d24ad3 33 33 addrobj.c \ 34 34 icmp.c \ 35 icmpv6.c \ 35 36 inetsrv.c \ 36 37 inet_link.c \ 37 38 inetcfg.c \ 38 39 inetping.c \ 40 inetping6.c \ 39 41 pdu.c \ 40 42 reass.c \ -
uspace/srv/net/inetsrv/inet_link.c
r02a09ed r1d24ad3 71 71 break; 72 72 case AF_INET6: 73 // FIXME TODO74 return ENOTSUP;73 rc = inet_pdu_decode6(sdu->data, sdu->size, &packet); 74 break; 75 75 default: 76 76 log_msg(LOG_DEFAULT, LVL_DEBUG, "invalid address family"); … … 206 206 207 207 inet_addrobj_t *addr; 208 inet_addrobj_t *addr6; 208 209 209 210 static int first = 1; 210 211 211 212 addr = inet_addrobj_new(); 213 addr6 = inet_addrobj_new(); 212 214 213 215 if (first) { 214 216 inet_naddr(&addr->naddr, 127, 0, 0, 1, 24); 217 inet_naddr6(&addr6->naddr, 0, 0, 0, 0, 0, 0, 0, 1, 128); 215 218 first = 0; 216 219 } else { 217 /* XXX For testing: set static IP address 10.0.2.15/24 */ 220 /* 221 * FIXME 222 * Setting static IP addresses for testing purposes 223 * 10.0.2.15/24 224 * fd19:1680::4/120 225 */ 218 226 inet_naddr(&addr->naddr, 10, 0, 2, 15, 24); 227 inet_naddr6(&addr6->naddr, 0xfd19, 0x1680, 0, 0, 0, 0, 0, 4, 120); 219 228 } 220 229 221 230 addr->ilink = ilink; 231 addr6->ilink = ilink; 222 232 addr->name = str_dup("v4a"); 233 addr6->name = str_dup("v6a"); 234 223 235 rc = inet_addrobj_add(addr); 224 236 if (rc != EOK) { 225 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed setting IP address on internet link.");237 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed adding IPv4 address."); 226 238 inet_addrobj_delete(addr); 227 239 /* XXX Roll back */ 228 240 return rc; 229 241 } 230 242 243 rc = inet_addrobj_add(addr6); 244 if (rc != EOK) { 245 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed adding IPv6 address."); 246 inet_addrobj_delete(addr6); 247 /* XXX Roll back */ 248 return rc; 249 } 250 231 251 inet_naddr_addr(&addr->naddr, &iaddr); 232 252 rc = iplink_addr_add(ilink->iplink, &iaddr); 233 253 if (rc != EOK) { 234 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed setting IP address on internet link.");254 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed setting IPv4 address on internet link."); 235 255 inet_addrobj_remove(addr); 236 256 inet_addrobj_delete(addr); … … 238 258 return rc; 239 259 } 240 260 261 inet_naddr_addr(&addr6->naddr, &iaddr); 262 rc = iplink_addr_add(ilink->iplink, &iaddr); 263 if (rc != EOK) { 264 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed setting IPv6 address on internet link."); 265 inet_addrobj_remove(addr6); 266 inet_addrobj_delete(addr6); 267 /* XXX Roll back */ 268 return rc; 269 } 270 241 271 return EOK; 242 272 -
uspace/srv/net/inetsrv/inet_std.h
r02a09ed r1d24ad3 40 40 #include <sys/types.h> 41 41 42 /** I nternetDatagram header (fixed part) */42 /** IPv4 Datagram header (fixed part) */ 43 43 typedef struct { 44 44 /** Version, Internet Header Length */ … … 90 90 }; 91 91 92 /** IPv6 Datagram header (fixed part) */ 93 typedef struct { 94 /** Version, Traffic class first 4 bits */ 95 uint8_t ver_tc; 96 /** Traffic class (the rest), Flow label */ 97 uint8_t tc_fl[3]; 98 /* Payload length */ 99 uint16_t payload_len; 100 /** Next header */ 101 uint8_t next; 102 /** Hop limit */ 103 uint8_t hop_limit; 104 /** Source address */ 105 uint8_t src_addr[16]; 106 /** Destination address */ 107 uint8_t dest_addr[16]; 108 } ip6_header_t; 109 110 /** IPv6 Datagram Fragment extension header */ 111 typedef struct { 112 /** Next header */ 113 uint8_t next; 114 /** Reserved */ 115 uint8_t reserved; 116 /** Fragment Offset, Flags */ 117 uint16_t foff_flags; 118 /** Identification */ 119 uint32_t id; 120 } ip6_header_fragment_t; 121 92 122 /** Fragment offset is expressed in units of 8 bytes */ 93 123 #define FRAG_OFFS_UNIT 8 -
uspace/srv/net/inetsrv/inetsrv.c
r02a09ed r1d24ad3 50 50 #include "icmp.h" 51 51 #include "icmp_std.h" 52 #include "icmpv6.h" 53 #include "icmpv6_std.h" 52 54 #include "inetsrv.h" 53 55 #include "inetcfg.h" 54 56 #include "inetping.h" 57 #include "inetping6.h" 55 58 #include "inet_link.h" 56 59 #include "reass.h" … … 93 96 rc = loc_service_register_with_iface(SERVICE_NAME_INETPING, &sid, 94 97 INET_PORT_PING); 98 if (rc != EOK) { 99 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service (%d).", rc); 100 return EEXIST; 101 } 102 103 rc = loc_service_register_with_iface(SERVICE_NAME_INETPING6, &sid, 104 INET_PORT_PING6); 95 105 if (rc != EOK) { 96 106 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service (%d).", rc); … … 350 360 inetping_conn(iid, icall, arg); 351 361 break; 362 case INET_PORT_PING6: 363 inetping6_conn(iid, icall, arg); 364 break; 352 365 default: 353 366 async_answer_0(iid, ENOTSUP); … … 416 429 log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_recv_dgram_local()"); 417 430 418 /* ICMP messages are handled internally */431 /* ICMP and ICMPv6 messages are handled internally */ 419 432 if (proto == IP_PROTO_ICMP) 420 433 return icmp_recv(dgram); 434 435 if (proto == IP_PROTO_ICMPV6) 436 return icmpv6_recv(dgram); 421 437 422 438 client = inet_client_find(proto); -
uspace/srv/net/inetsrv/inetsrv.h
r02a09ed r1d24ad3 63 63 } inetping_client_t; 64 64 65 /** Inetping6 Client */ 66 typedef struct { 67 /** Callback session */ 68 async_sess_t *sess; 69 /** Session identifier */ 70 uint16_t ident; 71 /** Link to client list */ 72 link_t client_list; 73 } inetping6_client_t; 74 65 75 /** Address object info */ 66 76 typedef struct { … … 179 189 } inetping_sdu_t; 180 190 191 typedef struct { 192 addr128_t src; 193 addr128_t dest; 194 uint16_t seq_no; 195 void *data; 196 size_t size; 197 } inetping6_sdu_t; 198 181 199 extern int inet_ev_recv(inet_client_t *, inet_dgram_t *); 182 200 extern int inet_recv_packet(inet_packet_t *); -
uspace/srv/net/inetsrv/pdu.c
r02a09ed r1d24ad3 131 131 break; 132 132 case AF_INET6: 133 // FIXME TODO134 assert(false);133 hdr_size = sizeof(ip6_header_t); 134 break; 135 135 default: 136 136 assert(false); … … 178 178 /* Encode header fields */ 179 179 ip_header_t *hdr; 180 ip6_header_t *hdr6; 180 181 181 182 switch (src_af) { … … 202 203 break; 203 204 case AF_INET6: 204 // FIXME TODO 205 return ENOTSUP; 205 // TODO FIXME: fragmentation 206 207 hdr6 = (ip6_header_t *) data; 208 209 hdr6->ver_tc = (6 << (VI_VERSION_l)); 210 memset(hdr6->tc_fl, 0, 3); 211 hdr6->payload_len = host2uint16_t_be(packet->size); 212 hdr6->next = packet->proto; 213 hdr6->hop_limit = packet->ttl; 214 215 host2addr128_t_be(src_v6, hdr6->src_addr); 216 host2addr128_t_be(dest_v6, hdr6->dest_addr); 217 218 break; 206 219 default: 207 220 assert(false); … … 281 294 } 282 295 296 int inet_pdu_decode6(void *data, size_t size, inet_packet_t *packet) 297 { 298 // FIXME TODO 299 return ENOTSUP; 300 } 301 283 302 /** @} 284 303 */ -
uspace/srv/net/inetsrv/pdu.h
r02a09ed r1d24ad3 48 48 size_t *, size_t *); 49 49 extern int inet_pdu_decode(void *, size_t, inet_packet_t *); 50 extern int inet_pdu_decode6(void *, size_t, inet_packet_t *); 50 51 51 52 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
