Changeset 1d24ad3 in mainline
- 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
- Files:
-
- 7 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
r02a09ed r1d24ad3 193 193 $(USPACE_PATH)/app/nterm/nterm \ 194 194 $(USPACE_PATH)/app/ping/ping \ 195 $(USPACE_PATH)/app/ping6/ping6 \ 195 196 $(USPACE_PATH)/app/stats/stats \ 196 197 $(USPACE_PATH)/app/sysinfo/sysinfo \ -
uspace/Makefile
r02a09ed r1d24ad3 72 72 app/nettest3 \ 73 73 app/ping \ 74 app/ping6 \ 74 75 app/sysinfo \ 75 76 app/mkbd \ -
uspace/lib/c/Makefile
r02a09ed r1d24ad3 96 96 generic/inetcfg.c \ 97 97 generic/inetping.c \ 98 generic/inetping6.c \ 98 99 generic/io/asprintf.c \ 99 100 generic/io/input.c \ -
uspace/lib/c/include/ipc/inet.h
r02a09ed r1d24ad3 45 45 INET_PORT_CFG, 46 46 /** Ping service port */ 47 INET_PORT_PING 47 INET_PORT_PING, 48 /** Ping6 service port */ 49 INET_PORT_PING6 48 50 } inet_port_t; 49 51 … … 88 90 } inetping_request_t; 89 91 92 /** Events on Inet ping6 port */ 93 typedef enum { 94 INETPING6_EV_RECV = IPC_FIRST_USER_METHOD 95 } inetping6_event_t; 96 97 /** Requests on Inet ping6 port */ 98 typedef enum { 99 INETPING6_SEND = IPC_FIRST_USER_METHOD, 100 INETPING6_GET_SRCADDR 101 } inetping6_request_t; 102 90 103 #endif 91 104 -
uspace/lib/c/include/ipc/services.h
r02a09ed r1d24ad3 53 53 } services_t; 54 54 55 #define SERVICE_NAME_DNSR "net/dnsr" 56 #define SERVICE_NAME_INET "net/inet" 57 #define SERVICE_NAME_INETCFG "net/inetcfg" 58 #define SERVICE_NAME_INETPING "net/inetping" 55 #define SERVICE_NAME_DNSR "net/dnsr" 56 #define SERVICE_NAME_INET "net/inet" 57 #define SERVICE_NAME_INETCFG "net/inetcfg" 58 #define SERVICE_NAME_INETPING "net/inetping" 59 #define SERVICE_NAME_INETPING6 "net/inetping6" 59 60 60 61 #endif -
uspace/srv/net/ethip/ethip.c
r02a09ed r1d24ad3 245 245 rc = iplink_ev_recv(&nic->iplink, &sdu, AF_INET); 246 246 break; 247 case ETYPE_IPV6: 248 log_msg(LOG_DEFAULT, LVL_DEBUG, " - construct SDU IPv6"); 249 sdu.data = frame.data; 250 sdu.size = frame.size; 251 log_msg(LOG_DEFAULT, LVL_DEBUG, " - call iplink_ev_recv"); 252 rc = iplink_ev_recv(&nic->iplink, &sdu, AF_INET6); 253 break; 247 254 default: 248 255 log_msg(LOG_DEFAULT, LVL_DEBUG, "Unknown ethertype 0x%" PRIx16, -
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 -
uspace/srv/net/tcp/pdu.c
r02a09ed r1d24ad3 145 145 } 146 146 147 static uint16_t tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr) 147 static uint16_t tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr, 148 tcp_phdr6_t *phdr6) 148 149 { 149 150 addr32_t src_v4; … … 167 168 break; 168 169 case AF_INET6: 169 // FIXME TODO 170 assert(false); 170 host2addr128_t_be(src_v6, phdr6->src); 171 host2addr128_t_be(dest_v6, phdr6->dest); 172 phdr6->tcp_length = 173 host2uint32_t_be(pdu->header_size + pdu->text_size); 174 memset(phdr6->zero, 0, 3); 175 phdr6->next = IP_PROTO_TCP; 176 break; 171 177 default: 172 178 assert(false); … … 259 265 uint16_t cs_headers; 260 266 tcp_phdr_t phdr; 261 262 uint16_t af = tcp_phdr_setup(pdu, &phdr); 267 tcp_phdr6_t phdr6; 268 269 uint16_t af = tcp_phdr_setup(pdu, &phdr, &phdr6); 263 270 switch (af) { 264 271 case AF_INET: … … 267 274 break; 268 275 case AF_INET6: 269 // FIXME TODO 270 assert(false); 276 cs_phdr = tcp_checksum_calc(TCP_CHECKSUM_INIT, (void *) &phdr6, 277 sizeof(tcp_phdr6_t)); 278 break; 271 279 default: 272 280 assert(false); -
uspace/srv/net/tcp/std.h
r02a09ed r1d24ad3 75 75 }; 76 76 77 /** TCP pseudo header */77 /** TCP IPv4 pseudo header */ 78 78 typedef struct { 79 79 /** Source address */ … … 88 88 uint16_t tcp_length; 89 89 } tcp_phdr_t; 90 91 /** TCP IPv6 pseudo header */ 92 typedef struct { 93 /** Source address */ 94 addr128_t src; 95 /** Destination address */ 96 addr128_t dest; 97 /** TCP length */ 98 uint32_t tcp_length; 99 /** Zeroes */ 100 uint8_t zero[3]; 101 /** Next header */ 102 uint8_t next; 103 } tcp_phdr6_t; 90 104 91 105 /** Option kind */ -
uspace/srv/net/udp/pdu.c
r02a09ed r1d24ad3 85 85 } 86 86 87 static uint16_t udp_phdr_setup(udp_pdu_t *pdu, udp_phdr_t *phdr) 87 static uint16_t udp_phdr_setup(udp_pdu_t *pdu, udp_phdr_t *phdr, 88 udp_phdr6_t *phdr6) 88 89 { 89 90 addr32_t src_v4; … … 106 107 break; 107 108 case AF_INET6: 108 // FIXME TODO 109 assert(false); 109 host2addr128_t_be(src_v6, phdr6->src_addr); 110 host2addr128_t_be(dest_v6, phdr6->dest_addr); 111 phdr6->udp_length = host2uint32_t_be(pdu->data_size); 112 memset(phdr6->zero, 0, 3); 113 phdr6->next = IP_PROTO_UDP; 114 break; 110 115 default: 111 116 assert(false); … … 130 135 uint16_t cs_phdr; 131 136 udp_phdr_t phdr; 132 133 uint16_t af = udp_phdr_setup(pdu, &phdr); 137 udp_phdr6_t phdr6; 138 139 uint16_t af = udp_phdr_setup(pdu, &phdr, &phdr6); 134 140 switch (af) { 135 141 case AF_INET: … … 138 144 break; 139 145 case AF_INET6: 140 // FIXME TODO 141 assert(false); 146 cs_phdr = udp_checksum_calc(UDP_CHECKSUM_INIT, (void *) &phdr6, 147 sizeof(udp_phdr6_t)); 148 break; 142 149 default: 143 150 assert(false); -
uspace/srv/net/udp/std.h
r02a09ed r1d24ad3 54 54 } udp_header_t; 55 55 56 /** UDP pseudo header */56 /** UDP IPv4 pseudo header */ 57 57 typedef struct { 58 58 /** Source address */ … … 68 68 } udp_phdr_t; 69 69 70 /** UDP IPv6 pseudo header */ 71 typedef struct { 72 /** Source address */ 73 addr128_t src_addr; 74 /** Destination address */ 75 addr128_t dest_addr; 76 /** UDP length */ 77 uint32_t udp_length; 78 /** Reserved */ 79 uint8_t zero[3]; 80 /** Next header */ 81 uint8_t next; 82 } udp_phdr6_t; 83 70 84 #endif 71 85
Note:
See TracChangeset
for help on using the changeset viewer.