1 /* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 #include <unistd.h> 25 #include <fcntl.h> 26 #include <signal.h> 27 #include <time.h> 28 #include <errno.h> 29 #include <sys/time.h> 30 #include <zlib.h> 31 32 #include "android/tcpdump.h" 33 34 /* Needed early for HOST_BSD etc. */ 35 #include "config-host.h" 36 37 #ifndef _WIN32 38 #include <sys/times.h> 39 #include <sys/wait.h> 40 #include <termios.h> 41 #include <sys/mman.h> 42 #include <sys/ioctl.h> 43 #include <sys/resource.h> 44 #include <sys/socket.h> 45 #include <netinet/in.h> 46 #include <net/if.h> 47 #ifdef __NetBSD__ 48 #include <net/if_tap.h> 49 #endif 50 #ifdef __linux__ 51 #include <linux/if_tun.h> 52 #endif 53 #include <arpa/inet.h> 54 #include <dirent.h> 55 #include <netdb.h> 56 #include <sys/select.h> 57 #ifdef CONFIG_BSD 58 #include <sys/stat.h> 59 #if defined(__FreeBSD__) || defined(__DragonFly__) 60 #include <libutil.h> 61 #else 62 #include <util.h> 63 #endif 64 #elif defined (__GLIBC__) && defined (__FreeBSD_kernel__) 65 #include <freebsd/stdlib.h> 66 #else 67 #ifdef __linux__ 68 #include <pty.h> 69 #include <malloc.h> 70 #include <linux/rtc.h> 71 72 /* For the benefit of older linux systems which don't supply it, 73 we use a local copy of hpet.h. */ 74 /* #include <linux/hpet.h> */ 75 #include "hw/timer/hpet.h" 76 77 #include <linux/ppdev.h> 78 #include <linux/parport.h> 79 #endif 80 #ifdef __sun__ 81 #include <sys/stat.h> 82 #include <sys/ethernet.h> 83 #include <sys/sockio.h> 84 #include <netinet/arp.h> 85 #include <netinet/in.h> 86 #include <netinet/in_systm.h> 87 #include <netinet/ip.h> 88 #include <netinet/ip_icmp.h> // must come after ip.h 89 #include <netinet/udp.h> 90 #include <netinet/tcp.h> 91 #include <net/if.h> 92 #include <syslog.h> 93 #include <stropts.h> 94 #endif 95 #endif 96 #endif 97 98 #if defined(__OpenBSD__) 99 #include <util.h> 100 #endif 101 102 #if defined(CONFIG_VDE) 103 #include <libvdeplug.h> 104 #endif 105 106 #ifdef _WIN32 107 #include <windows.h> 108 #include <malloc.h> 109 #include <sys/timeb.h> 110 #include <mmsystem.h> 111 #define getopt_long_only getopt_long 112 #define memalign(align, size) malloc(size) 113 #endif 114 115 #include "qemu-common.h" 116 #include "net/net.h" 117 #include "monitor/monitor.h" 118 #include "sysemu/sysemu.h" 119 #include "qemu/timer.h" 120 #include "sysemu/char.h" 121 #include "audio/audio.h" 122 #include "qemu/sockets.h" 123 #include "qemu/log.h" 124 125 #if defined(CONFIG_SLIRP) 126 #include "libslirp.h" 127 #endif 128 129 #if defined(CONFIG_ANDROID) 130 #include "android/shaper.h" 131 #endif 132 133 #include "android/android.h" 134 #include "telephony/modem_driver.h" 135 136 static VLANState *first_vlan; 137 138 /***********************************************************/ 139 /* network device redirectors */ 140 141 #if defined(DEBUG_NET) || defined(DEBUG_SLIRP) 142 static void hex_dump(FILE *f, const uint8_t *buf, int size) 143 { 144 int len, i, j, c; 145 146 for(i=0;i<size;i+=16) { 147 len = size - i; 148 if (len > 16) 149 len = 16; 150 fprintf(f, "%08x ", i); 151 for(j=0;j<16;j++) { 152 if (j < len) 153 fprintf(f, " %02x", buf[i+j]); 154 else 155 fprintf(f, " "); 156 } 157 fprintf(f, " "); 158 for(j=0;j<len;j++) { 159 c = buf[i+j]; 160 if (c < ' ' || c > '~') 161 c = '.'; 162 fprintf(f, "%c", c); 163 } 164 fprintf(f, "\n"); 165 } 166 } 167 #endif 168 169 static int parse_macaddr(uint8_t *macaddr, const char *p) 170 { 171 int i; 172 char *last_char; 173 long int offset; 174 175 errno = 0; 176 offset = strtol(p, &last_char, 0); 177 if (0 == errno && '\0' == *last_char && 178 offset >= 0 && offset <= 0xFFFFFF) { 179 macaddr[3] = (offset & 0xFF0000) >> 16; 180 macaddr[4] = (offset & 0xFF00) >> 8; 181 macaddr[5] = offset & 0xFF; 182 return 0; 183 } else { 184 for(i = 0; i < 6; i++) { 185 macaddr[i] = strtol(p, (char **)&p, 16); 186 if (i == 5) { 187 if (*p != '\0') 188 return -1; 189 } else { 190 if (*p != ':' && *p != '-') 191 return -1; 192 p++; 193 } 194 } 195 return 0; 196 } 197 198 return -1; 199 } 200 201 static int get_str_sep(char *buf, int buf_size, const char **pp, int sep) 202 { 203 const char *p, *p1; 204 int len; 205 p = *pp; 206 p1 = strchr(p, sep); 207 if (!p1) 208 return -1; 209 len = p1 - p; 210 p1++; 211 if (buf_size > 0) { 212 if (len > buf_size - 1) 213 len = buf_size - 1; 214 memcpy(buf, p, len); 215 buf[len] = '\0'; 216 } 217 *pp = p1; 218 return 0; 219 } 220 221 int parse_host_src_port(SockAddress *haddr, 222 SockAddress *saddr, 223 const char *input_str) 224 { 225 char *str = strdup(input_str); 226 char *host_str = str; 227 char *src_str; 228 const char *src_str2; 229 char *ptr; 230 231 /* 232 * Chop off any extra arguments at the end of the string which 233 * would start with a comma, then fill in the src port information 234 * if it was provided else use the "any address" and "any port". 235 */ 236 if ((ptr = strchr(str,','))) 237 *ptr = '\0'; 238 239 if ((src_str = strchr(input_str,'@'))) { 240 *src_str = '\0'; 241 src_str++; 242 } 243 244 if (parse_host_port(haddr, host_str) < 0) 245 goto fail; 246 247 src_str2 = src_str; 248 if (!src_str || *src_str == '\0') 249 src_str2 = ":0"; 250 251 if (parse_host_port(saddr, src_str2) < 0) 252 goto fail; 253 254 free(str); 255 return(0); 256 257 fail: 258 free(str); 259 return -1; 260 } 261 262 int parse_host_port(SockAddress *saddr, const char *str) 263 { 264 char buf[512]; 265 const char *p, *r; 266 uint32_t ip; 267 int port; 268 269 p = str; 270 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) 271 return -1; 272 273 if (buf[0] == '\0') { 274 ip = 0; 275 } else { 276 if (qemu_isdigit(buf[0])) { 277 if (inet_strtoip(buf, &ip) < 0) 278 return -1; 279 } else { 280 if (sock_address_init_resolve(saddr, buf, 0, 0) < 0) 281 return - 1; 282 ip = sock_address_get_ip(saddr); 283 } 284 } 285 port = strtol(p, (char **)&r, 0); 286 if (r == p) 287 return -1; 288 sock_address_init_inet(saddr, ip, port); 289 return 0; 290 } 291 292 #if !defined(_WIN32) && 0 293 static int parse_unix_path(struct sockaddr_un *uaddr, const char *str) 294 { 295 const char *p; 296 int len; 297 298 len = MIN(108, strlen(str)); 299 p = strchr(str, ','); 300 if (p) 301 len = MIN(len, p - str); 302 303 memset(uaddr, 0, sizeof(*uaddr)); 304 305 uaddr->sun_family = AF_UNIX; 306 memcpy(uaddr->sun_path, str, len); 307 308 return 0; 309 } 310 #endif 311 312 void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]) 313 { 314 snprintf(vc->info_str, sizeof(vc->info_str), 315 "model=%s,macaddr=%02x:%02x:%02x:%02x:%02x:%02x", 316 vc->model, 317 macaddr[0], macaddr[1], macaddr[2], 318 macaddr[3], macaddr[4], macaddr[5]); 319 } 320 321 static char *assign_name(VLANClientState *vc1, const char *model) 322 { 323 VLANState *vlan; 324 char buf[256]; 325 int id = 0; 326 327 for (vlan = first_vlan; vlan; vlan = vlan->next) { 328 VLANClientState *vc; 329 330 for (vc = vlan->first_client; vc; vc = vc->next) 331 if (vc != vc1 && strcmp(vc->model, model) == 0) 332 id++; 333 } 334 335 snprintf(buf, sizeof(buf), "%s.%d", model, id); 336 337 return strdup(buf); 338 } 339 340 VLANClientState *qemu_new_vlan_client(VLANState *vlan, 341 const char *model, 342 const char *name, 343 NetCanReceive *can_receive, 344 NetReceive *receive, 345 NetReceiveIOV *receive_iov, 346 NetCleanup *cleanup, 347 void *opaque) 348 { 349 VLANClientState *vc, **pvc; 350 vc = g_malloc0(sizeof(VLANClientState)); 351 vc->model = strdup(model); 352 if (name) 353 vc->name = strdup(name); 354 else 355 vc->name = assign_name(vc, model); 356 vc->can_receive = can_receive; 357 vc->receive = receive; 358 vc->receive_iov = receive_iov; 359 vc->cleanup = cleanup; 360 vc->opaque = opaque; 361 vc->vlan = vlan; 362 363 vc->next = NULL; 364 pvc = &vlan->first_client; 365 while (*pvc != NULL) 366 pvc = &(*pvc)->next; 367 *pvc = vc; 368 return vc; 369 } 370 371 void qemu_del_vlan_client(VLANClientState *vc) 372 { 373 VLANClientState **pvc = &vc->vlan->first_client; 374 375 while (*pvc != NULL) 376 if (*pvc == vc) { 377 *pvc = vc->next; 378 if (vc->cleanup) { 379 vc->cleanup(vc); 380 } 381 free(vc->name); 382 free(vc->model); 383 g_free(vc); 384 break; 385 } else 386 pvc = &(*pvc)->next; 387 } 388 389 VLANClientState *qemu_find_vlan_client(VLANState *vlan, void *opaque) 390 { 391 VLANClientState **pvc = &vlan->first_client; 392 393 while (*pvc != NULL) 394 if ((*pvc)->opaque == opaque) 395 return *pvc; 396 else 397 pvc = &(*pvc)->next; 398 399 return NULL; 400 } 401 402 int qemu_can_send_packet(VLANClientState *sender) 403 { 404 VLANState *vlan = sender->vlan; 405 VLANClientState *vc; 406 407 for (vc = vlan->first_client; vc != NULL; vc = vc->next) { 408 if (vc == sender) { 409 continue; 410 } 411 412 /* no can_receive() handler, they can always receive */ 413 if (!vc->can_receive || vc->can_receive(vc)) { 414 return 1; 415 } 416 } 417 return 0; 418 } 419 420 static int 421 qemu_deliver_packet(VLANClientState *sender, const uint8_t *buf, int size) 422 { 423 VLANClientState *vc; 424 int ret = -1; 425 426 sender->vlan->delivering = 1; 427 428 for (vc = sender->vlan->first_client; vc != NULL; vc = vc->next) { 429 ssize_t len; 430 431 if (vc == sender) { 432 continue; 433 } 434 435 if (vc->link_down) { 436 ret = size; 437 continue; 438 } 439 440 len = vc->receive(vc, buf, size); 441 442 ret = (ret >= 0) ? ret : len; 443 } 444 445 sender->vlan->delivering = 0; 446 447 return ret; 448 } 449 450 void qemu_flush_queued_packets(VLANClientState *vc) 451 { 452 VLANPacket *packet; 453 454 while ((packet = vc->vlan->send_queue) != NULL) { 455 int ret; 456 457 vc->vlan->send_queue = packet->next; 458 459 ret = qemu_deliver_packet(packet->sender, packet->data, packet->size); 460 if (ret == 0 && packet->sent_cb != NULL) { 461 packet->next = vc->vlan->send_queue; 462 vc->vlan->send_queue = packet; 463 break; 464 } 465 466 if (packet->sent_cb) 467 packet->sent_cb(packet->sender); 468 469 g_free(packet); 470 } 471 } 472 473 static void qemu_enqueue_packet(VLANClientState *sender, 474 const uint8_t *buf, int size, 475 NetPacketSent *sent_cb) 476 { 477 VLANPacket *packet; 478 479 packet = g_malloc(sizeof(VLANPacket) + size); 480 packet->next = sender->vlan->send_queue; 481 packet->sender = sender; 482 packet->size = size; 483 packet->sent_cb = sent_cb; 484 memcpy(packet->data, buf, size); 485 sender->vlan->send_queue = packet; 486 } 487 488 ssize_t qemu_send_packet_async(VLANClientState *sender, 489 const uint8_t *buf, int size, 490 NetPacketSent *sent_cb) 491 { 492 int ret; 493 494 if (sender->link_down) { 495 return size; 496 } 497 498 #ifdef DEBUG_NET 499 printf("vlan %d send:\n", sender->vlan->id); 500 hex_dump(stdout, buf, size); 501 #endif 502 503 if (sender->vlan->delivering) { 504 qemu_enqueue_packet(sender, buf, size, NULL); 505 return size; 506 } 507 508 ret = qemu_deliver_packet(sender, buf, size); 509 if (ret == 0 && sent_cb != NULL) { 510 qemu_enqueue_packet(sender, buf, size, sent_cb); 511 return 0; 512 } 513 514 qemu_flush_queued_packets(sender); 515 516 return ret; 517 } 518 519 void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size) 520 { 521 qemu_send_packet_async(vc, buf, size, NULL); 522 } 523 524 static ssize_t vc_sendv_compat(VLANClientState *vc, const struct iovec *iov, 525 int iovcnt) 526 { 527 uint8_t buffer[4096]; 528 size_t offset = 0; 529 int i; 530 531 for (i = 0; i < iovcnt; i++) { 532 size_t len; 533 534 len = MIN(sizeof(buffer) - offset, iov[i].iov_len); 535 memcpy(buffer + offset, iov[i].iov_base, len); 536 offset += len; 537 } 538 539 return vc->receive(vc, buffer, offset); 540 } 541 542 static ssize_t calc_iov_length(const struct iovec *iov, int iovcnt) 543 { 544 size_t offset = 0; 545 int i; 546 547 for (i = 0; i < iovcnt; i++) 548 offset += iov[i].iov_len; 549 return offset; 550 } 551 552 static int qemu_deliver_packet_iov(VLANClientState *sender, 553 const struct iovec *iov, int iovcnt) 554 { 555 VLANClientState *vc; 556 int ret = -1; 557 558 sender->vlan->delivering = 1; 559 560 for (vc = sender->vlan->first_client; vc != NULL; vc = vc->next) { 561 ssize_t len; 562 563 if (vc == sender) { 564 continue; 565 } 566 567 if (vc->link_down) { 568 ret = calc_iov_length(iov, iovcnt); 569 continue; 570 } 571 572 if (vc->receive_iov) { 573 len = vc->receive_iov(vc, iov, iovcnt); 574 } else { 575 len = vc_sendv_compat(vc, iov, iovcnt); 576 } 577 578 ret = (ret >= 0) ? ret : len; 579 } 580 581 sender->vlan->delivering = 0; 582 583 return ret; 584 } 585 586 static ssize_t qemu_enqueue_packet_iov(VLANClientState *sender, 587 const struct iovec *iov, int iovcnt, 588 NetPacketSent *sent_cb) 589 { 590 VLANPacket *packet; 591 size_t max_len = 0; 592 int i; 593 594 max_len = calc_iov_length(iov, iovcnt); 595 596 packet = g_malloc(sizeof(VLANPacket) + max_len); 597 packet->next = sender->vlan->send_queue; 598 packet->sender = sender; 599 packet->sent_cb = sent_cb; 600 packet->size = 0; 601 602 for (i = 0; i < iovcnt; i++) { 603 size_t len = iov[i].iov_len; 604 605 memcpy(packet->data + packet->size, iov[i].iov_base, len); 606 packet->size += len; 607 } 608 609 sender->vlan->send_queue = packet; 610 611 return packet->size; 612 } 613 614 ssize_t qemu_sendv_packet_async(VLANClientState *sender, 615 const struct iovec *iov, int iovcnt, 616 NetPacketSent *sent_cb) 617 { 618 int ret; 619 620 if (sender->link_down) { 621 return calc_iov_length(iov, iovcnt); 622 } 623 624 if (sender->vlan->delivering) { 625 return qemu_enqueue_packet_iov(sender, iov, iovcnt, NULL); 626 } 627 628 ret = qemu_deliver_packet_iov(sender, iov, iovcnt); 629 if (ret == 0 && sent_cb != NULL) { 630 qemu_enqueue_packet_iov(sender, iov, iovcnt, sent_cb); 631 return 0; 632 } 633 634 qemu_flush_queued_packets(sender); 635 636 return ret; 637 } 638 639 ssize_t 640 qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov, int iovcnt) 641 { 642 return qemu_sendv_packet_async(vc, iov, iovcnt, NULL); 643 } 644 645 static void config_error(Monitor *mon, const char *fmt, ...) 646 { 647 va_list ap; 648 649 va_start(ap, fmt); 650 if (mon) { 651 monitor_vprintf(mon, fmt, ap); 652 } else { 653 fprintf(stderr, "qemu: "); 654 vfprintf(stderr, fmt, ap); 655 exit(1); 656 } 657 va_end(ap); 658 } 659 660 #if defined(CONFIG_SLIRP) 661 662 /* slirp network adapter */ 663 664 struct slirp_config_str { 665 struct slirp_config_str *next; 666 const char *str; 667 }; 668 669 static int slirp_inited; 670 static struct slirp_config_str *slirp_redirs; 671 #ifndef _WIN32 672 static const char *slirp_smb_export; 673 #endif 674 static VLANClientState *slirp_vc; 675 676 #ifndef _WIN32 677 static void slirp_smb(const char *exported_dir); 678 #endif 679 static void slirp_redirection(Monitor *mon, const char *redir_str); 680 681 double qemu_net_upload_speed = 0.; 682 double qemu_net_download_speed = 0.; 683 int qemu_net_min_latency = 0; 684 int qemu_net_max_latency = 0; 685 int qemu_net_disable = 0; 686 687 int 688 ip_packet_is_internal( const uint8_t* data, size_t size ) 689 { 690 const uint8_t* end = data + size; 691 692 /* must have room for Mac + IP header */ 693 if (data + 40 > end) 694 return 0; 695 696 if (data[12] != 0x08 || data[13] != 0x00 ) 697 return 0; 698 699 /* must have valid IP header */ 700 data += 14; 701 if ((data[0] >> 4) != 4 || (data[0] & 15) < 5) 702 return 0; 703 704 /* internal if both source and dest addresses are in 10.x.x.x */ 705 return ( data[12] == 10 && data[16] == 10); 706 } 707 708 #ifdef CONFIG_ANDROID 709 710 NetShaper slirp_shaper_in; 711 NetShaper slirp_shaper_out; 712 NetDelay slirp_delay_in; 713 714 static void 715 slirp_delay_in_cb( void* data, 716 size_t size, 717 void* opaque ) 718 { 719 slirp_input( (const uint8_t*)data, (int)size ); 720 opaque = opaque; 721 } 722 723 static void 724 slirp_shaper_in_cb( void* data, 725 size_t size, 726 void* opaque ) 727 { 728 netdelay_send_aux( slirp_delay_in, data, size, opaque ); 729 } 730 731 static void 732 slirp_shaper_out_cb( void* data, 733 size_t size, 734 void* opaque ) 735 { 736 qemu_send_packet( slirp_vc, (const uint8_t*)data, (int)size ); 737 } 738 739 void 740 slirp_init_shapers( void ) 741 { 742 slirp_delay_in = netdelay_create( slirp_delay_in_cb ); 743 slirp_shaper_in = netshaper_create( 1, slirp_shaper_in_cb ); 744 slirp_shaper_out = netshaper_create( 1, slirp_shaper_out_cb ); 745 746 netdelay_set_latency( slirp_delay_in, qemu_net_min_latency, qemu_net_max_latency ); 747 netshaper_set_rate( slirp_shaper_out, qemu_net_download_speed ); 748 netshaper_set_rate( slirp_shaper_in, qemu_net_upload_speed ); 749 } 750 751 #endif /* CONFIG_ANDROID */ 752 753 754 int slirp_can_output(void) 755 { 756 #ifdef CONFIG_ANDROID 757 return !slirp_vc || 758 ( netshaper_can_send(slirp_shaper_out) && 759 qemu_can_send_packet(slirp_vc) ); 760 #else 761 return !slirp_vc || qemu_can_send_packet(slirp_vc); 762 #endif 763 } 764 765 void slirp_output(const uint8_t *pkt, int pkt_len) 766 { 767 #ifdef DEBUG_SLIRP 768 printf("slirp output:\n"); 769 hex_dump(stdout, pkt, pkt_len); 770 #endif 771 if (qemu_tcpdump_active) 772 qemu_tcpdump_packet(pkt, pkt_len); 773 774 if (!slirp_vc) 775 return; 776 777 #ifdef CONFIG_ANDROID 778 netshaper_send(slirp_shaper_out, (void*)pkt, pkt_len); 779 #else 780 qemu_send_packet(slirp_vc, pkt, pkt_len); 781 #endif 782 } 783 784 int slirp_is_inited(void) 785 { 786 return slirp_inited; 787 } 788 789 static ssize_t slirp_receive(VLANClientState *vc, const uint8_t *buf, size_t size) 790 { 791 #ifdef DEBUG_SLIRP 792 printf("slirp input:\n"); 793 hex_dump(stdout, buf, size); 794 #endif 795 if (qemu_tcpdump_active) 796 qemu_tcpdump_packet(buf, size); 797 798 #ifdef CONFIG_ANDROID 799 netshaper_send(slirp_shaper_in, (char*)buf, size); 800 #else 801 slirp_input(buf, size); 802 #endif 803 return size; 804 } 805 806 static int slirp_in_use; 807 808 static void net_slirp_cleanup(VLANClientState *vc) 809 { 810 slirp_in_use = 0; 811 } 812 813 static int net_slirp_init(VLANState *vlan, const char *model, const char *name, 814 int restricted, const char *ip) 815 { 816 if (slirp_in_use) { 817 /* slirp only supports a single instance so far */ 818 return -1; 819 } 820 if (!slirp_inited) { 821 slirp_inited = 1; 822 slirp_init(restricted, ip); 823 824 while (slirp_redirs) { 825 struct slirp_config_str *config = slirp_redirs; 826 827 slirp_redirection(NULL, config->str); 828 slirp_redirs = config->next; 829 g_free(config); 830 } 831 #ifndef _WIN32 832 if (slirp_smb_export) { 833 slirp_smb(slirp_smb_export); 834 } 835 #endif 836 slirp_init_shapers(); 837 } 838 839 slirp_vc = qemu_new_vlan_client(vlan, model, name, NULL, slirp_receive, 840 NULL, net_slirp_cleanup, NULL); 841 slirp_vc->info_str[0] = '\0'; 842 slirp_in_use = 1; 843 return 0; 844 } 845 846 static void net_slirp_redir_print(void *opaque, int is_udp, 847 const SockAddress *laddr, 848 const SockAddress *faddr) 849 { 850 Monitor *mon = (Monitor *)opaque; 851 uint32_t h_addr; 852 uint32_t g_addr; 853 char buf[16]; 854 855 h_addr = sock_address_get_ip(faddr); 856 g_addr = sock_address_get_ip(laddr); 857 858 monitor_printf(mon, " %s |", is_udp ? "udp" : "tcp" ); 859 snprintf(buf, 15, "%d.%d.%d.%d", (h_addr >> 24) & 0xff, 860 (h_addr >> 16) & 0xff, 861 (h_addr >> 8) & 0xff, 862 (h_addr) & 0xff); 863 monitor_printf(mon, " %15s |", buf); 864 monitor_printf(mon, " %5d |", sock_address_get_port(faddr)); 865 866 snprintf(buf, 15, "%d.%d.%d.%d", (g_addr >> 24) & 0xff, 867 (g_addr >> 16) & 0xff, 868 (g_addr >> 8) & 0xff, 869 (g_addr) & 0xff); 870 monitor_printf(mon, " %15s |", buf); 871 monitor_printf(mon, " %5d\n", sock_address_get_port(laddr)); 872 873 } 874 875 static void net_slirp_redir_list(Monitor *mon) 876 { 877 if (!mon) 878 return; 879 880 monitor_printf(mon, " Prot | Host Addr | HPort | Guest Addr | GPort\n"); 881 monitor_printf(mon, " | | | | \n"); 882 slirp_redir_loop(net_slirp_redir_print, mon); 883 } 884 885 static void net_slirp_redir_rm(Monitor *mon, const char *port_str) 886 { 887 int host_port; 888 char buf[256] = ""; 889 const char *p = port_str; 890 int is_udp = 0; 891 int n; 892 893 if (!mon) 894 return; 895 896 if (!port_str || !port_str[0]) 897 goto fail_syntax; 898 899 get_str_sep(buf, sizeof(buf), &p, ':'); 900 901 if (!strcmp(buf, "tcp") || buf[0] == '\0') { 902 is_udp = 0; 903 } else if (!strcmp(buf, "udp")) { 904 is_udp = 1; 905 } else { 906 goto fail_syntax; 907 } 908 909 host_port = atoi(p); 910 911 n = slirp_redir_rm(is_udp, host_port); 912 913 monitor_printf(mon, "removed %d redirections to %s port %d\n", n, 914 is_udp ? "udp" : "tcp", host_port); 915 return; 916 917 fail_syntax: 918 monitor_printf(mon, "invalid format\n"); 919 } 920 921 static void slirp_redirection(Monitor *mon, const char *redir_str) 922 { 923 uint32_t guest_addr; 924 int host_port, guest_port; 925 const char *p; 926 char buf[256], *r; 927 int is_udp; 928 929 p = redir_str; 930 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) { 931 goto fail_syntax; 932 } 933 if (!strcmp(buf, "tcp") || buf[0] == '\0') { 934 is_udp = 0; 935 } else if (!strcmp(buf, "udp")) { 936 is_udp = 1; 937 } else { 938 goto fail_syntax; 939 } 940 941 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) { 942 goto fail_syntax; 943 } 944 host_port = strtol(buf, &r, 0); 945 if (r == buf) { 946 goto fail_syntax; 947 } 948 949 if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) { 950 goto fail_syntax; 951 } 952 if (buf[0] == '\0') { 953 pstrcpy(buf, sizeof(buf), "10.0.2.15"); 954 } 955 if (inet_strtoip(buf, &guest_addr) < 0) { 956 goto fail_syntax; 957 } 958 959 guest_port = strtol(p, &r, 0); 960 if (r == p) { 961 goto fail_syntax; 962 } 963 964 if (slirp_redir(is_udp, host_port, guest_addr, guest_port) < 0) { 965 config_error(mon, "could not set up redirection '%s'\n", redir_str); 966 } 967 return; 968 969 fail_syntax: 970 config_error(mon, "invalid redirection format '%s'\n", redir_str); 971 } 972 973 void net_slirp_redir(Monitor *mon, const char *redir_str, const char *redir_opt2) 974 { 975 struct slirp_config_str *config; 976 977 if (!slirp_inited) { 978 if (mon) { 979 monitor_printf(mon, "user mode network stack not in use\n"); 980 } else { 981 config = g_malloc(sizeof(*config)); 982 config->str = redir_str; 983 config->next = slirp_redirs; 984 slirp_redirs = config; 985 } 986 return; 987 } 988 989 if (!strcmp(redir_str, "remove")) { 990 net_slirp_redir_rm(mon, redir_opt2); 991 return; 992 } 993 994 if (!strcmp(redir_str, "list")) { 995 net_slirp_redir_list(mon); 996 return; 997 } 998 999 slirp_redirection(mon, redir_str); 1000 } 1001 1002 #ifndef _WIN32 1003 1004 static char smb_dir[1024]; 1005 1006 static void erase_dir(char *dir_name) 1007 { 1008 DIR *d; 1009 struct dirent *de; 1010 char filename[1024]; 1011 1012 /* erase all the files in the directory */ 1013 if ((d = opendir(dir_name)) != NULL) { 1014 for(;;) { 1015 de = readdir(d); 1016 if (!de) 1017 break; 1018 if (strcmp(de->d_name, ".") != 0 && 1019 strcmp(de->d_name, "..") != 0) { 1020 snprintf(filename, sizeof(filename), "%s/%s", 1021 smb_dir, de->d_name); 1022 if (unlink(filename) != 0) /* is it a directory? */ 1023 erase_dir(filename); 1024 } 1025 } 1026 closedir(d); 1027 rmdir(dir_name); 1028 } 1029 } 1030 1031 /* automatic user mode samba server configuration */ 1032 static void smb_exit(void) 1033 { 1034 erase_dir(smb_dir); 1035 } 1036 1037 static void slirp_smb(const char *exported_dir) 1038 { 1039 char smb_conf[1024]; 1040 char smb_cmdline[1024]; 1041 FILE *f; 1042 1043 /* XXX: better tmp dir construction */ 1044 snprintf(smb_dir, sizeof(smb_dir), "/tmp/qemu-smb.%ld", (long)getpid()); 1045 if (mkdir(smb_dir, 0700) < 0) { 1046 fprintf(stderr, "qemu: could not create samba server dir '%s'\n", smb_dir); 1047 exit(1); 1048 } 1049 snprintf(smb_conf, sizeof(smb_conf), "%s/%s", smb_dir, "smb.conf"); 1050 1051 f = fopen(smb_conf, "w"); 1052 if (!f) { 1053 fprintf(stderr, "qemu: could not create samba server configuration file '%s'\n", smb_conf); 1054 exit(1); 1055 } 1056 fprintf(f, 1057 "[global]\n" 1058 "private dir=%s\n" 1059 "smb ports=0\n" 1060 "socket address=127.0.0.1\n" 1061 "pid directory=%s\n" 1062 "lock directory=%s\n" 1063 "log file=%s/log.smbd\n" 1064 "smb passwd file=%s/smbpasswd\n" 1065 "security = share\n" 1066 "[qemu]\n" 1067 "path=%s\n" 1068 "read only=no\n" 1069 "guest ok=yes\n", 1070 smb_dir, 1071 smb_dir, 1072 smb_dir, 1073 smb_dir, 1074 smb_dir, 1075 exported_dir 1076 ); 1077 fclose(f); 1078 atexit(smb_exit); 1079 1080 snprintf(smb_cmdline, sizeof(smb_cmdline), "%s -s %s", 1081 SMBD_COMMAND, smb_conf); 1082 1083 slirp_add_exec(0, smb_cmdline, 4, 139); 1084 } 1085 1086 /* automatic user mode samba server configuration */ 1087 void net_slirp_smb(const char *exported_dir) 1088 { 1089 if (slirp_smb_export) { 1090 fprintf(stderr, "-smb given twice\n"); 1091 exit(1); 1092 } 1093 slirp_smb_export = exported_dir; 1094 if (slirp_inited) { 1095 slirp_smb(exported_dir); 1096 } 1097 } 1098 1099 #endif /* !defined(_WIN32) */ 1100 1101 void do_info_slirp(Monitor *mon) 1102 { 1103 //slirp_stats(); 1104 } 1105 1106 struct VMChannel { 1107 CharDriverState *hd; 1108 int port; 1109 }; 1110 1111 static int vmchannel_can_read(void *opaque) 1112 { 1113 struct VMChannel *vmc = (struct VMChannel*)opaque; 1114 return slirp_socket_can_recv(4, vmc->port); 1115 } 1116 1117 static void vmchannel_read(void *opaque, const uint8_t *buf, int size) 1118 { 1119 struct VMChannel *vmc = (struct VMChannel*)opaque; 1120 slirp_socket_recv(4, vmc->port, buf, size); 1121 } 1122 1123 #endif /* CONFIG_SLIRP */ 1124 1125 #if !defined(_WIN32) 1126 1127 typedef struct TAPState { 1128 VLANClientState *vc; 1129 int fd; 1130 char down_script[1024]; 1131 char down_script_arg[128]; 1132 uint8_t buf[4096]; 1133 } TAPState; 1134 1135 static int launch_script(const char *setup_script, const char *ifname, int fd); 1136 1137 static ssize_t tap_receive_iov(VLANClientState *vc, const struct iovec *iov, 1138 int iovcnt) 1139 { 1140 TAPState *s = vc->opaque; 1141 ssize_t len; 1142 1143 do { 1144 len = writev(s->fd, iov, iovcnt); 1145 } while (len == -1 && (errno == EINTR || errno == EAGAIN)); 1146 1147 return len; 1148 } 1149 1150 static ssize_t tap_receive(VLANClientState *vc, const uint8_t *buf, size_t size) 1151 { 1152 TAPState *s = vc->opaque; 1153 ssize_t len; 1154 1155 do { 1156 len = write(s->fd, buf, size); 1157 } while (len == -1 && (errno == EINTR || errno == EAGAIN)); 1158 1159 return len; 1160 } 1161 1162 static int tap_can_send(void *opaque) 1163 { 1164 TAPState *s = opaque; 1165 1166 return qemu_can_send_packet(s->vc); 1167 } 1168 1169 #ifdef __sun__ 1170 static ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen) 1171 { 1172 struct strbuf sbuf; 1173 int f = 0; 1174 1175 sbuf.maxlen = maxlen; 1176 sbuf.buf = (char *)buf; 1177 1178 return getmsg(tapfd, NULL, &sbuf, &f) >= 0 ? sbuf.len : -1; 1179 } 1180 #else 1181 static ssize_t tap_read_packet(int tapfd, uint8_t *buf, int maxlen) 1182 { 1183 return read(tapfd, buf, maxlen); 1184 } 1185 #endif 1186 1187 static void tap_send(void *opaque); 1188 1189 static void tap_send_completed(VLANClientState *vc) 1190 { 1191 TAPState *s = vc->opaque; 1192 1193 qemu_set_fd_handler2(s->fd, tap_can_send, tap_send, NULL, s); 1194 } 1195 1196 static void tap_send(void *opaque) 1197 { 1198 TAPState *s = opaque; 1199 int size; 1200 1201 do { 1202 size = tap_read_packet(s->fd, s->buf, sizeof(s->buf)); 1203 if (size <= 0) { 1204 break; 1205 } 1206 1207 size = qemu_send_packet_async(s->vc, s->buf, size, tap_send_completed); 1208 if (size == 0) { 1209 qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL); 1210 } 1211 } while (size > 0); 1212 } 1213 1214 static void tap_cleanup(VLANClientState *vc) 1215 { 1216 TAPState *s = vc->opaque; 1217 1218 if (s->down_script[0]) 1219 launch_script(s->down_script, s->down_script_arg, s->fd); 1220 1221 qemu_set_fd_handler(s->fd, NULL, NULL, NULL); 1222 close(s->fd); 1223 g_free(s); 1224 } 1225 1226 /* fd support */ 1227 1228 static TAPState *net_tap_fd_init(VLANState *vlan, 1229 const char *model, 1230 const char *name, 1231 int fd) 1232 { 1233 TAPState *s; 1234 1235 s = g_malloc0(sizeof(TAPState)); 1236 s->fd = fd; 1237 s->vc = qemu_new_vlan_client(vlan, model, name, NULL, tap_receive, 1238 tap_receive_iov, tap_cleanup, s); 1239 qemu_set_fd_handler2(s->fd, tap_can_send, tap_send, NULL, s); 1240 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "fd=%d", fd); 1241 return s; 1242 } 1243 1244 #if defined (CONFIG_BSD) || defined (__FreeBSD_kernel__) 1245 static int tap_open(char *ifname, int ifname_size) 1246 { 1247 int fd; 1248 char *dev; 1249 struct stat s; 1250 1251 TFR(fd = open("/dev/tap", O_RDWR)); 1252 if (fd < 0) { 1253 fprintf(stderr, "warning: could not open /dev/tap: no virtual network emulation\n"); 1254 return -1; 1255 } 1256 1257 fstat(fd, &s); 1258 dev = devname(s.st_rdev, S_IFCHR); 1259 pstrcpy(ifname, ifname_size, dev); 1260 1261 fcntl(fd, F_SETFL, O_NONBLOCK); 1262 return fd; 1263 } 1264 #elif defined(__sun__) 1265 #define TUNNEWPPA (('T'<<16) | 0x0001) 1266 /* 1267 * Allocate TAP device, returns opened fd. 1268 * Stores dev name in the first arg(must be large enough). 1269 */ 1270 static int tap_alloc(char *dev, size_t dev_size) 1271 { 1272 int tap_fd, if_fd, ppa = -1; 1273 static int ip_fd = 0; 1274 char *ptr; 1275 1276 static int arp_fd = 0; 1277 int ip_muxid, arp_muxid; 1278 struct strioctl strioc_if, strioc_ppa; 1279 int link_type = I_PLINK;; 1280 struct lifreq ifr; 1281 char actual_name[32] = ""; 1282 1283 memset(&ifr, 0x0, sizeof(ifr)); 1284 1285 if( *dev ){ 1286 ptr = dev; 1287 while( *ptr && !qemu_isdigit((int)*ptr) ) ptr++; 1288 ppa = atoi(ptr); 1289 } 1290 1291 /* Check if IP device was opened */ 1292 if( ip_fd ) 1293 close(ip_fd); 1294 1295 TFR(ip_fd = open("/dev/udp", O_RDWR, 0)); 1296 if (ip_fd < 0) { 1297 syslog(LOG_ERR, "Can't open /dev/ip (actually /dev/udp)"); 1298 return -1; 1299 } 1300 1301 TFR(tap_fd = open("/dev/tap", O_RDWR, 0)); 1302 if (tap_fd < 0) { 1303 syslog(LOG_ERR, "Can't open /dev/tap"); 1304 return -1; 1305 } 1306 1307 /* Assign a new PPA and get its unit number. */ 1308 strioc_ppa.ic_cmd = TUNNEWPPA; 1309 strioc_ppa.ic_timout = 0; 1310 strioc_ppa.ic_len = sizeof(ppa); 1311 strioc_ppa.ic_dp = (char *)&ppa; 1312 if ((ppa = ioctl (tap_fd, I_STR, &strioc_ppa)) < 0) 1313 syslog (LOG_ERR, "Can't assign new interface"); 1314 1315 TFR(if_fd = open("/dev/tap", O_RDWR, 0)); 1316 if (if_fd < 0) { 1317 syslog(LOG_ERR, "Can't open /dev/tap (2)"); 1318 return -1; 1319 } 1320 if(ioctl(if_fd, I_PUSH, "ip") < 0){ 1321 syslog(LOG_ERR, "Can't push IP module"); 1322 return -1; 1323 } 1324 1325 if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) < 0) 1326 syslog(LOG_ERR, "Can't get flags\n"); 1327 1328 snprintf (actual_name, 32, "tap%d", ppa); 1329 pstrcpy(ifr.lifr_name, sizeof(ifr.lifr_name), actual_name); 1330 1331 ifr.lifr_ppa = ppa; 1332 /* Assign ppa according to the unit number returned by tun device */ 1333 1334 if (ioctl (if_fd, SIOCSLIFNAME, &ifr) < 0) 1335 syslog (LOG_ERR, "Can't set PPA %d", ppa); 1336 if (ioctl(if_fd, SIOCGLIFFLAGS, &ifr) <0) 1337 syslog (LOG_ERR, "Can't get flags\n"); 1338 /* Push arp module to if_fd */ 1339 if (ioctl (if_fd, I_PUSH, "arp") < 0) 1340 syslog (LOG_ERR, "Can't push ARP module (2)"); 1341 1342 /* Push arp module to ip_fd */ 1343 if (ioctl (ip_fd, I_POP, NULL) < 0) 1344 syslog (LOG_ERR, "I_POP failed\n"); 1345 if (ioctl (ip_fd, I_PUSH, "arp") < 0) 1346 syslog (LOG_ERR, "Can't push ARP module (3)\n"); 1347 /* Open arp_fd */ 1348 TFR(arp_fd = open ("/dev/tap", O_RDWR, 0)); 1349 if (arp_fd < 0) 1350 syslog (LOG_ERR, "Can't open %s\n", "/dev/tap"); 1351 1352 /* Set ifname to arp */ 1353 strioc_if.ic_cmd = SIOCSLIFNAME; 1354 strioc_if.ic_timout = 0; 1355 strioc_if.ic_len = sizeof(ifr); 1356 strioc_if.ic_dp = (char *)𝔦 1357 if (ioctl(arp_fd, I_STR, &strioc_if) < 0){ 1358 syslog (LOG_ERR, "Can't set ifname to arp\n"); 1359 } 1360 1361 if((ip_muxid = ioctl(ip_fd, I_LINK, if_fd)) < 0){ 1362 syslog(LOG_ERR, "Can't link TAP device to IP"); 1363 return -1; 1364 } 1365 1366 if ((arp_muxid = ioctl (ip_fd, link_type, arp_fd)) < 0) 1367 syslog (LOG_ERR, "Can't link TAP device to ARP"); 1368 1369 close (if_fd); 1370 1371 memset(&ifr, 0x0, sizeof(ifr)); 1372 pstrcpy(ifr.lifr_name, sizeof(ifr.lifr_name), actual_name); 1373 ifr.lifr_ip_muxid = ip_muxid; 1374 ifr.lifr_arp_muxid = arp_muxid; 1375 1376 if (ioctl (ip_fd, SIOCSLIFMUXID, &ifr) < 0) 1377 { 1378 ioctl (ip_fd, I_PUNLINK , arp_muxid); 1379 ioctl (ip_fd, I_PUNLINK, ip_muxid); 1380 syslog (LOG_ERR, "Can't set multiplexor id"); 1381 } 1382 1383 snprintf(dev, dev_size, "tap%d", ppa); 1384 return tap_fd; 1385 } 1386 1387 static int tap_open(char *ifname, int ifname_size) 1388 { 1389 char dev[10]=""; 1390 int fd; 1391 if( (fd = tap_alloc(dev, sizeof(dev))) < 0 ){ 1392 fprintf(stderr, "Cannot allocate TAP device\n"); 1393 return -1; 1394 } 1395 pstrcpy(ifname, ifname_size, dev); 1396 fcntl(fd, F_SETFL, O_NONBLOCK); 1397 return fd; 1398 } 1399 #elif defined (_AIX) 1400 static int tap_open(char *ifname, int ifname_size) 1401 { 1402 fprintf (stderr, "no tap on AIX\n"); 1403 return -1; 1404 } 1405 #else 1406 static int tap_open(char *ifname, int ifname_size) 1407 { 1408 struct ifreq ifr; 1409 int fd, ret; 1410 1411 TFR(fd = open("/dev/net/tun", O_RDWR)); 1412 if (fd < 0) { 1413 fprintf(stderr, "warning: could not open /dev/net/tun: no virtual network emulation\n"); 1414 return -1; 1415 } 1416 memset(&ifr, 0, sizeof(ifr)); 1417 ifr.ifr_flags = IFF_TAP | IFF_NO_PI; 1418 if (ifname[0] != '\0') 1419 pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname); 1420 else 1421 pstrcpy(ifr.ifr_name, IFNAMSIZ, "tap%d"); 1422 ret = ioctl(fd, TUNSETIFF, (void *) &ifr); 1423 if (ret != 0) { 1424 fprintf(stderr, "warning: could not configure /dev/net/tun: no virtual network emulation\n"); 1425 close(fd); 1426 return -1; 1427 } 1428 pstrcpy(ifname, ifname_size, ifr.ifr_name); 1429 fcntl(fd, F_SETFL, O_NONBLOCK); 1430 return fd; 1431 } 1432 #endif 1433 1434 static int launch_script(const char *setup_script, const char *ifname, int fd) 1435 { 1436 sigset_t oldmask, mask; 1437 int pid, status; 1438 char *args[3]; 1439 char **parg; 1440 1441 sigemptyset(&mask); 1442 sigaddset(&mask, SIGCHLD); 1443 sigprocmask(SIG_BLOCK, &mask, &oldmask); 1444 1445 /* try to launch network script */ 1446 pid = fork(); 1447 if (pid == 0) { 1448 int open_max = sysconf(_SC_OPEN_MAX), i; 1449 1450 for (i = 0; i < open_max; i++) { 1451 if (i != STDIN_FILENO && 1452 i != STDOUT_FILENO && 1453 i != STDERR_FILENO && 1454 i != fd) { 1455 close(i); 1456 } 1457 } 1458 parg = args; 1459 *parg++ = (char *)setup_script; 1460 *parg++ = (char *)ifname; 1461 *parg++ = NULL; 1462 execv(setup_script, args); 1463 exit(1); 1464 } else if (pid > 0) { 1465 while (waitpid(pid, &status, 0) != pid) { 1466 /* loop */ 1467 } 1468 sigprocmask(SIG_SETMASK, &oldmask, NULL); 1469 1470 if (WIFEXITED(status) && WEXITSTATUS(status) == 0) { 1471 return 0; 1472 } 1473 } 1474 fprintf(stderr, "%s: could not launch network script\n", setup_script); 1475 return -1; 1476 } 1477 1478 static int net_tap_init(VLANState *vlan, const char *model, 1479 const char *name, const char *ifname1, 1480 const char *setup_script, const char *down_script) 1481 { 1482 TAPState *s; 1483 int fd; 1484 char ifname[128]; 1485 1486 if (ifname1 != NULL) 1487 pstrcpy(ifname, sizeof(ifname), ifname1); 1488 else 1489 ifname[0] = '\0'; 1490 TFR(fd = tap_open(ifname, sizeof(ifname))); 1491 if (fd < 0) 1492 return -1; 1493 1494 if (!setup_script || !strcmp(setup_script, "no")) 1495 setup_script = ""; 1496 if (setup_script[0] != '\0') { 1497 if (launch_script(setup_script, ifname, fd)) 1498 return -1; 1499 } 1500 s = net_tap_fd_init(vlan, model, name, fd); 1501 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1502 "ifname=%s,script=%s,downscript=%s", 1503 ifname, setup_script, down_script); 1504 if (down_script && strcmp(down_script, "no")) { 1505 snprintf(s->down_script, sizeof(s->down_script), "%s", down_script); 1506 snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s", ifname); 1507 } 1508 return 0; 1509 } 1510 1511 #endif /* !_WIN32 */ 1512 1513 #if defined(CONFIG_VDE) 1514 typedef struct VDEState { 1515 VLANClientState *vc; 1516 VDECONN *vde; 1517 } VDEState; 1518 1519 static void vde_to_qemu(void *opaque) 1520 { 1521 VDEState *s = opaque; 1522 uint8_t buf[4096]; 1523 int size; 1524 1525 size = vde_recv(s->vde, (char *)buf, sizeof(buf), 0); 1526 if (size > 0) { 1527 qemu_send_packet(s->vc, buf, size); 1528 } 1529 } 1530 1531 static ssize_t vde_receive(VLANClientState *vc, const uint8_t *buf, size_t size) 1532 { 1533 VDEState *s = vc->opaque; 1534 ssize_t ret; 1535 1536 do { 1537 ret = vde_send(s->vde, (const char *)buf, size, 0); 1538 } while (ret < 0 && errno == EINTR); 1539 1540 return ret; 1541 } 1542 1543 static void vde_cleanup(VLANClientState *vc) 1544 { 1545 VDEState *s = vc->opaque; 1546 qemu_set_fd_handler(vde_datafd(s->vde), NULL, NULL, NULL); 1547 vde_close(s->vde); 1548 g_free(s); 1549 } 1550 1551 static int net_vde_init(VLANState *vlan, const char *model, 1552 const char *name, const char *sock, 1553 int port, const char *group, int mode) 1554 { 1555 VDEState *s; 1556 char *init_group = strlen(group) ? (char *)group : NULL; 1557 char *init_sock = strlen(sock) ? (char *)sock : NULL; 1558 1559 struct vde_open_args args = { 1560 .port = port, 1561 .group = init_group, 1562 .mode = mode, 1563 }; 1564 1565 s = g_malloc0(sizeof(VDEState)); 1566 s->vde = vde_open(init_sock, (char *)"QEMU", &args); 1567 if (!s->vde){ 1568 free(s); 1569 return -1; 1570 } 1571 s->vc = qemu_new_vlan_client(vlan, model, name, NULL, vde_receive, 1572 NULL, vde_cleanup, s); 1573 qemu_set_fd_handler(vde_datafd(s->vde), vde_to_qemu, NULL, s); 1574 snprintf(s->vc->info_str, sizeof(s->vc->info_str), "sock=%s,fd=%d", 1575 sock, vde_datafd(s->vde)); 1576 return 0; 1577 } 1578 #endif 1579 1580 /* network connection */ 1581 typedef struct NetSocketState { 1582 VLANClientState *vc; 1583 int fd; 1584 int state; /* 0 = getting length, 1 = getting data */ 1585 unsigned int index; 1586 unsigned int packet_len; 1587 uint8_t buf[4096]; 1588 SockAddress dgram_dst; /* contains inet host and port destination iff connectionless (SOCK_DGRAM) */ 1589 } NetSocketState; 1590 1591 typedef struct NetSocketListenState { 1592 VLANState *vlan; 1593 char *model; 1594 char *name; 1595 int fd; 1596 } NetSocketListenState; 1597 1598 /* XXX: we consider we can send the whole packet without blocking */ 1599 static ssize_t net_socket_receive(VLANClientState *vc, const uint8_t *buf, size_t size) 1600 { 1601 NetSocketState *s = vc->opaque; 1602 uint32_t len; 1603 len = htonl(size); 1604 1605 socket_send(s->fd, (const uint8_t *)&len, sizeof(len)); 1606 return socket_send(s->fd, buf, size); 1607 } 1608 1609 static ssize_t net_socket_receive_dgram(VLANClientState *vc, const uint8_t *buf, size_t size) 1610 { 1611 NetSocketState *s = vc->opaque; 1612 1613 return socket_sendto(s->fd, buf, size, &s->dgram_dst); 1614 } 1615 1616 static void net_socket_send(void *opaque) 1617 { 1618 NetSocketState *s = opaque; 1619 int size, err; 1620 unsigned l; 1621 uint8_t buf1[4096]; 1622 const uint8_t *buf; 1623 1624 size = recv(s->fd, (void *)buf1, sizeof(buf1), 0); 1625 if (size < 0) { 1626 err = socket_error(); 1627 if (err != EWOULDBLOCK && err != EAGAIN) 1628 goto eoc; 1629 } else if (size == 0) { 1630 /* end of connection */ 1631 eoc: 1632 qemu_set_fd_handler(s->fd, NULL, NULL, NULL); 1633 closesocket(s->fd); 1634 return; 1635 } 1636 buf = buf1; 1637 while (size > 0) { 1638 /* reassemble a packet from the network */ 1639 switch(s->state) { 1640 case 0: 1641 l = 4 - s->index; 1642 if (l > size) 1643 l = size; 1644 memcpy(s->buf + s->index, buf, l); 1645 buf += l; 1646 size -= l; 1647 s->index += l; 1648 if (s->index == 4) { 1649 /* got length */ 1650 s->packet_len = ntohl(*(uint32_t *)s->buf); 1651 s->index = 0; 1652 s->state = 1; 1653 } 1654 break; 1655 case 1: 1656 l = s->packet_len - s->index; 1657 if (l > size) 1658 l = size; 1659 if (s->index + l <= sizeof(s->buf)) { 1660 memcpy(s->buf + s->index, buf, l); 1661 } else { 1662 fprintf(stderr, "serious error: oversized packet received," 1663 "connection terminated.\n"); 1664 s->state = 0; 1665 goto eoc; 1666 } 1667 1668 s->index += l; 1669 buf += l; 1670 size -= l; 1671 if (s->index >= s->packet_len) { 1672 qemu_send_packet(s->vc, s->buf, s->packet_len); 1673 s->index = 0; 1674 s->state = 0; 1675 } 1676 break; 1677 } 1678 } 1679 } 1680 1681 static void net_socket_send_dgram(void *opaque) 1682 { 1683 NetSocketState *s = opaque; 1684 int size; 1685 1686 size = recv(s->fd, (void *)s->buf, sizeof(s->buf), 0); 1687 if (size < 0) 1688 return; 1689 if (size == 0) { 1690 /* end of connection */ 1691 qemu_set_fd_handler(s->fd, NULL, NULL, NULL); 1692 return; 1693 } 1694 qemu_send_packet(s->vc, s->buf, size); 1695 } 1696 1697 static int net_socket_mcast_create(SockAddress *mcastaddr) 1698 { 1699 int fd; 1700 int ret; 1701 if (!IN_MULTICAST(sock_address_get_ip(mcastaddr))) { 1702 fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n", 1703 sock_address_to_string(mcastaddr), 1704 sock_address_get_ip(mcastaddr)); 1705 return -1; 1706 1707 } 1708 fd = socket_create_inet(SOCKET_DGRAM); 1709 if (fd < 0) { 1710 perror("socket(PF_INET, SOCK_DGRAM)"); 1711 return -1; 1712 } 1713 1714 ret = socket_set_xreuseaddr(fd); 1715 if (ret < 0) { 1716 perror("setsockopt(SOL_SOCKET, SO_REUSEADDR)"); 1717 goto fail; 1718 } 1719 1720 ret = socket_bind(fd, mcastaddr); 1721 if (ret < 0) { 1722 perror("bind"); 1723 goto fail; 1724 } 1725 1726 /* Add host to multicast group */ 1727 ret = socket_mcast_inet_add_membership(fd, sock_address_get_ip(mcastaddr)); 1728 if (ret < 0) { 1729 perror("setsockopt(IP_ADD_MEMBERSHIP)"); 1730 goto fail; 1731 } 1732 1733 /* Force mcast msgs to loopback (eg. several QEMUs in same host */ 1734 ret = socket_mcast_inet_set_loop(fd, 1); 1735 if (ret < 0) { 1736 perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)"); 1737 goto fail; 1738 } 1739 1740 socket_set_nonblock(fd); 1741 return fd; 1742 fail: 1743 if (fd >= 0) 1744 socket_close(fd); 1745 return -1; 1746 } 1747 1748 static void net_socket_cleanup(VLANClientState *vc) 1749 { 1750 NetSocketState *s = vc->opaque; 1751 qemu_set_fd_handler(s->fd, NULL, NULL, NULL); 1752 socket_close(s->fd); 1753 g_free(s); 1754 } 1755 1756 static NetSocketState *net_socket_fd_init_dgram(VLANState *vlan, 1757 const char *model, 1758 const char *name, 1759 int fd, int is_connected) 1760 { 1761 SockAddress saddr; 1762 int newfd; 1763 NetSocketState *s; 1764 1765 /* fd passed: multicast: "learn" dgram_dst address from bound address and save it 1766 * Because this may be "shared" socket from a "master" process, datagrams would be recv() 1767 * by ONLY ONE process: we must "clone" this dgram socket --jjo 1768 */ 1769 1770 if (is_connected) { 1771 if (socket_get_address(fd, &saddr) == 0) { 1772 /* must be bound */ 1773 if (sock_address_get_ip(&saddr) == 0) { 1774 fprintf(stderr, "qemu: error: init_dgram: fd=%d unbound, cannot setup multicast dst addr\n", 1775 fd); 1776 return NULL; 1777 } 1778 /* clone dgram socket */ 1779 newfd = net_socket_mcast_create(&saddr); 1780 if (newfd < 0) { 1781 /* error already reported by net_socket_mcast_create() */ 1782 socket_close(fd); 1783 return NULL; 1784 } 1785 /* clone newfd to fd, close newfd */ 1786 dup2(newfd, fd); 1787 socket_close(newfd); 1788 1789 } else { 1790 fprintf(stderr, "qemu: error: init_dgram: fd=%d failed getsockname(): %s\n", 1791 fd, strerror(errno)); 1792 return NULL; 1793 } 1794 } 1795 1796 s = g_malloc0(sizeof(NetSocketState)); 1797 s->fd = fd; 1798 1799 s->vc = qemu_new_vlan_client(vlan, model, name, NULL, net_socket_receive_dgram, 1800 NULL, net_socket_cleanup, s); 1801 qemu_set_fd_handler(s->fd, net_socket_send_dgram, NULL, s); 1802 1803 /* mcast: save bound address as dst */ 1804 if (is_connected) s->dgram_dst=saddr; 1805 1806 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1807 "socket: fd=%d (%s mcast=%s)", 1808 fd, is_connected? "cloned" : "", 1809 sock_address_to_string(&saddr)); 1810 return s; 1811 } 1812 1813 static void net_socket_connect(void *opaque) 1814 { 1815 NetSocketState *s = opaque; 1816 qemu_set_fd_handler(s->fd, net_socket_send, NULL, s); 1817 } 1818 1819 static NetSocketState *net_socket_fd_init_stream(VLANState *vlan, 1820 const char *model, 1821 const char *name, 1822 int fd, int is_connected) 1823 { 1824 NetSocketState *s; 1825 s = g_malloc0(sizeof(NetSocketState)); 1826 s->fd = fd; 1827 s->vc = qemu_new_vlan_client(vlan, model, name, NULL, net_socket_receive, 1828 NULL, net_socket_cleanup, s); 1829 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1830 "socket: fd=%d", fd); 1831 if (is_connected) { 1832 net_socket_connect(s); 1833 } else { 1834 qemu_set_fd_handler(s->fd, NULL, net_socket_connect, s); 1835 } 1836 return s; 1837 } 1838 1839 static NetSocketState *net_socket_fd_init(VLANState *vlan, 1840 const char *model, const char *name, 1841 int fd, int is_connected) 1842 { 1843 SocketType so_type = socket_get_type(fd); 1844 1845 switch(so_type) { 1846 case SOCKET_DGRAM: 1847 return net_socket_fd_init_dgram(vlan, model, name, fd, is_connected); 1848 case SOCKET_STREAM: 1849 return net_socket_fd_init_stream(vlan, model, name, fd, is_connected); 1850 default: 1851 /* who knows ... this could be a eg. a pty, do warn and continue as stream */ 1852 fprintf(stderr, "qemu: warning: socket type=%d for fd=%d is not SOCK_DGRAM or SOCK_STREAM\n", so_type, fd); 1853 return net_socket_fd_init_stream(vlan, model, name, fd, is_connected); 1854 } 1855 return NULL; 1856 } 1857 1858 static void net_socket_accept(void *opaque) 1859 { 1860 NetSocketListenState *s = opaque; 1861 NetSocketState *s1; 1862 SockAddress saddr; 1863 int fd; 1864 1865 for(;;) { 1866 fd = socket_accept(s->fd, &saddr); 1867 if (fd < 0) { 1868 return; 1869 } else if (fd >= 0) { 1870 break; 1871 } 1872 } 1873 s1 = net_socket_fd_init(s->vlan, s->model, s->name, fd, 1); 1874 if (!s1) { 1875 socket_close(fd); 1876 } else { 1877 snprintf(s1->vc->info_str, sizeof(s1->vc->info_str), 1878 "socket: connection from %s", sock_address_to_string(&saddr)); 1879 } 1880 } 1881 1882 static int net_socket_listen_init(VLANState *vlan, 1883 const char *model, 1884 const char *name, 1885 const char *host_str) 1886 { 1887 NetSocketListenState *s; 1888 int fd, ret; 1889 SockAddress saddr; 1890 1891 if (parse_host_port(&saddr, host_str) < 0) 1892 return -1; 1893 1894 s = g_malloc0(sizeof(NetSocketListenState)); 1895 1896 fd = socket_create_inet(SOCKET_STREAM); 1897 if (fd < 0) { 1898 perror("socket"); 1899 return -1; 1900 } 1901 socket_set_nonblock(fd); 1902 1903 /* allow fast reuse */ 1904 socket_set_xreuseaddr(fd); 1905 1906 ret = socket_bind(fd, &saddr); 1907 if (ret < 0) { 1908 perror("bind"); 1909 return -1; 1910 } 1911 ret = socket_listen(fd, 0); 1912 if (ret < 0) { 1913 perror("listen"); 1914 return -1; 1915 } 1916 s->vlan = vlan; 1917 s->model = strdup(model); 1918 s->name = name ? strdup(name) : NULL; 1919 s->fd = fd; 1920 qemu_set_fd_handler(fd, net_socket_accept, NULL, s); 1921 return 0; 1922 } 1923 1924 static int net_socket_connect_init(VLANState *vlan, 1925 const char *model, 1926 const char *name, 1927 const char *host_str) 1928 { 1929 NetSocketState *s; 1930 int fd, connected, ret, err; 1931 SockAddress saddr; 1932 1933 if (parse_host_port(&saddr, host_str) < 0) 1934 return -1; 1935 1936 fd = socket_create_inet(SOCKET_STREAM); 1937 if (fd < 0) { 1938 perror("socket"); 1939 return -1; 1940 } 1941 socket_set_nonblock(fd); 1942 1943 connected = 0; 1944 for(;;) { 1945 ret = socket_connect(fd, &saddr); 1946 if (ret < 0) { 1947 err = socket_error(); 1948 if (err == EWOULDBLOCK || err == EAGAIN) { 1949 } else if (err == EINPROGRESS || err == EALREADY) { 1950 break; 1951 } else { 1952 perror("connect"); 1953 socket_close(fd); 1954 return -1; 1955 } 1956 } else { 1957 connected = 1; 1958 break; 1959 } 1960 } 1961 s = net_socket_fd_init(vlan, model, name, fd, connected); 1962 if (!s) 1963 return -1; 1964 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1965 "socket: connect to %s", 1966 sock_address_to_string(&saddr)); 1967 return 0; 1968 } 1969 1970 static int net_socket_mcast_init(VLANState *vlan, 1971 const char *model, 1972 const char *name, 1973 const char *host_str) 1974 { 1975 NetSocketState *s; 1976 int fd; 1977 SockAddress saddr; 1978 1979 if (parse_host_port(&saddr, host_str) < 0) 1980 return -1; 1981 1982 1983 fd = net_socket_mcast_create(&saddr); 1984 if (fd < 0) 1985 return -1; 1986 1987 s = net_socket_fd_init(vlan, model, name, fd, 0); 1988 if (!s) 1989 return -1; 1990 1991 s->dgram_dst = saddr; 1992 1993 snprintf(s->vc->info_str, sizeof(s->vc->info_str), 1994 "socket: mcast=%s", 1995 sock_address_to_string(&saddr)); 1996 return 0; 1997 1998 } 1999 2000 typedef struct DumpState { 2001 VLANClientState *pcap_vc; 2002 int fd; 2003 int pcap_caplen; 2004 } DumpState; 2005 2006 #define PCAP_MAGIC 0xa1b2c3d4 2007 2008 struct pcap_file_hdr { 2009 uint32_t magic; 2010 uint16_t version_major; 2011 uint16_t version_minor; 2012 int32_t thiszone; 2013 uint32_t sigfigs; 2014 uint32_t snaplen; 2015 uint32_t linktype; 2016 }; 2017 2018 struct pcap_sf_pkthdr { 2019 struct { 2020 int32_t tv_sec; 2021 int32_t tv_usec; 2022 } ts; 2023 uint32_t caplen; 2024 uint32_t len; 2025 }; 2026 2027 static ssize_t dump_receive(VLANClientState *vc, const uint8_t *buf, size_t size) 2028 { 2029 DumpState *s = vc->opaque; 2030 struct pcap_sf_pkthdr hdr; 2031 int64_t ts; 2032 int caplen; 2033 2034 /* Early return in case of previous error. */ 2035 if (s->fd < 0) { 2036 return size; 2037 } 2038 2039 ts = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL), 1000000, get_ticks_per_sec()); 2040 caplen = size > s->pcap_caplen ? s->pcap_caplen : size; 2041 2042 hdr.ts.tv_sec = ts / 1000000; 2043 hdr.ts.tv_usec = ts % 1000000; 2044 hdr.caplen = caplen; 2045 hdr.len = size; 2046 if (write(s->fd, &hdr, sizeof(hdr)) != sizeof(hdr) || 2047 write(s->fd, buf, caplen) != caplen) { 2048 qemu_log("-net dump write error - stop dump\n"); 2049 close(s->fd); 2050 s->fd = -1; 2051 } 2052 2053 return size; 2054 } 2055 2056 static void net_dump_cleanup(VLANClientState *vc) 2057 { 2058 DumpState *s = vc->opaque; 2059 2060 close(s->fd); 2061 g_free(s); 2062 } 2063 2064 static int net_dump_init(Monitor *mon, VLANState *vlan, const char *device, 2065 const char *name, const char *filename, int len) 2066 { 2067 struct pcap_file_hdr hdr; 2068 DumpState *s; 2069 2070 s = g_malloc(sizeof(DumpState)); 2071 2072 s->fd = open(filename, O_CREAT | O_WRONLY, 0644); 2073 if (s->fd < 0) { 2074 config_error(mon, "-net dump: can't open %s\n", filename); 2075 return -1; 2076 } 2077 2078 s->pcap_caplen = len; 2079 2080 hdr.magic = PCAP_MAGIC; 2081 hdr.version_major = 2; 2082 hdr.version_minor = 4; 2083 hdr.thiszone = 0; 2084 hdr.sigfigs = 0; 2085 hdr.snaplen = s->pcap_caplen; 2086 hdr.linktype = 1; 2087 2088 if (write(s->fd, &hdr, sizeof(hdr)) < sizeof(hdr)) { 2089 config_error(mon, "-net dump write error: %s\n", strerror(errno)); 2090 close(s->fd); 2091 g_free(s); 2092 return -1; 2093 } 2094 2095 s->pcap_vc = qemu_new_vlan_client(vlan, device, name, NULL, dump_receive, NULL, 2096 net_dump_cleanup, s); 2097 snprintf(s->pcap_vc->info_str, sizeof(s->pcap_vc->info_str), 2098 "dump to %s (len=%d)", filename, len); 2099 return 0; 2100 } 2101 2102 /* find or alloc a new VLAN */ 2103 VLANState *qemu_find_vlan(int id) 2104 { 2105 VLANState **pvlan, *vlan; 2106 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) { 2107 if (vlan->id == id) 2108 return vlan; 2109 } 2110 vlan = g_malloc0(sizeof(VLANState)); 2111 vlan->id = id; 2112 vlan->next = NULL; 2113 pvlan = &first_vlan; 2114 while (*pvlan != NULL) 2115 pvlan = &(*pvlan)->next; 2116 *pvlan = vlan; 2117 return vlan; 2118 } 2119 2120 static int nic_get_free_idx(void) 2121 { 2122 int index; 2123 2124 for (index = 0; index < MAX_NICS; index++) 2125 if (!nd_table[index].used) 2126 return index; 2127 return -1; 2128 } 2129 2130 void qemu_check_nic_model(NICInfo *nd, const char *model) 2131 { 2132 const char *models[2]; 2133 2134 models[0] = model; 2135 models[1] = NULL; 2136 2137 qemu_check_nic_model_list(nd, models, model); 2138 } 2139 2140 void qemu_check_nic_model_list(NICInfo *nd, const char * const *models, 2141 const char *default_model) 2142 { 2143 int i, exit_status = 0; 2144 2145 if (!nd->model) 2146 nd->model = strdup(default_model); 2147 2148 if (strcmp(nd->model, "?") != 0) { 2149 for (i = 0 ; models[i]; i++) 2150 if (strcmp(nd->model, models[i]) == 0) 2151 return; 2152 2153 fprintf(stderr, "qemu: Unsupported NIC model: %s\n", nd->model); 2154 exit_status = 1; 2155 } 2156 2157 fprintf(stderr, "qemu: Supported NIC models: "); 2158 for (i = 0 ; models[i]; i++) 2159 fprintf(stderr, "%s%c", models[i], models[i+1] ? ',' : '\n'); 2160 2161 exit(exit_status); 2162 } 2163 2164 int net_client_init(Monitor *mon, const char *device, const char *p) 2165 { 2166 static const char * const fd_params[] = { 2167 "vlan", "name", "fd", NULL 2168 }; 2169 char buf[1024]; 2170 int vlan_id, ret; 2171 VLANState *vlan; 2172 char *name = NULL; 2173 2174 vlan_id = 0; 2175 if (get_param_value(buf, sizeof(buf), "vlan", p)) { 2176 vlan_id = strtol(buf, NULL, 0); 2177 } 2178 vlan = qemu_find_vlan(vlan_id); 2179 2180 if (get_param_value(buf, sizeof(buf), "name", p)) { 2181 name = g_strdup(buf); 2182 } 2183 if (!strcmp(device, "nic")) { 2184 static const char * const nic_params[] = { 2185 "vlan", "name", "macaddr", "model", NULL 2186 }; 2187 NICInfo *nd; 2188 uint8_t *macaddr; 2189 int idx = nic_get_free_idx(); 2190 2191 if (check_params(buf, sizeof(buf), nic_params, p) < 0) { 2192 config_error(mon, "invalid parameter '%s' in '%s'\n", buf, p); 2193 ret = -1; 2194 goto out; 2195 } 2196 if (idx == -1 || nb_nics >= MAX_NICS) { 2197 config_error(mon, "Too Many NICs\n"); 2198 ret = -1; 2199 goto out; 2200 } 2201 nd = &nd_table[idx]; 2202 macaddr = nd->macaddr; 2203 macaddr[0] = 0x52; 2204 macaddr[1] = 0x54; 2205 macaddr[2] = 0x00; 2206 macaddr[3] = 0x12; 2207 macaddr[4] = 0x34; 2208 macaddr[5] = 0x56 + idx; 2209 2210 if (get_param_value(buf, sizeof(buf), "macaddr", p)) { 2211 if (parse_macaddr(macaddr, buf) < 0) { 2212 config_error(mon, "invalid syntax for ethernet address\n"); 2213 ret = -1; 2214 goto out; 2215 } 2216 } 2217 if (get_param_value(buf, sizeof(buf), "model", p)) { 2218 nd->model = strdup(buf); 2219 } 2220 nd->vlan = vlan; 2221 nd->name = name; 2222 nd->used = 1; 2223 name = NULL; 2224 nb_nics++; 2225 vlan->nb_guest_devs++; 2226 ret = idx; 2227 } else 2228 if (!strcmp(device, "none")) { 2229 if (*p != '\0') { 2230 config_error(mon, "'none' takes no parameters\n"); 2231 ret = -1; 2232 goto out; 2233 } 2234 /* does nothing. It is needed to signal that no network cards 2235 are wanted */ 2236 ret = 0; 2237 } else 2238 #ifdef CONFIG_SLIRP 2239 if (!strcmp(device, "user")) { 2240 static const char * const slirp_params[] = { 2241 "vlan", "name", "hostname", "restrict", "ip", NULL 2242 }; 2243 int restricted = 0; 2244 char *ip = NULL; 2245 2246 if (check_params(buf, sizeof(buf), slirp_params, p) < 0) { 2247 config_error(mon, "invalid parameter '%s' in '%s'\n", buf, p); 2248 ret = -1; 2249 goto out; 2250 } 2251 if (get_param_value(buf, sizeof(buf), "hostname", p)) { 2252 pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf); 2253 } 2254 if (get_param_value(buf, sizeof(buf), "restrict", p)) { 2255 restricted = (buf[0] == 'y') ? 1 : 0; 2256 } 2257 if (get_param_value(buf, sizeof(buf), "ip", p)) { 2258 ip = g_strdup(buf); 2259 } 2260 vlan->nb_host_devs++; 2261 ret = net_slirp_init(vlan, device, name, restricted, ip); 2262 g_free(ip); 2263 } else if (!strcmp(device, "channel")) { 2264 long port; 2265 char name[20], *devname; 2266 struct VMChannel *vmc; 2267 2268 port = strtol(p, &devname, 10); 2269 devname++; 2270 if (port < 1 || port > 65535) { 2271 config_error(mon, "vmchannel wrong port number\n"); 2272 ret = -1; 2273 goto out; 2274 } 2275 vmc = malloc(sizeof(struct VMChannel)); 2276 snprintf(name, 20, "vmchannel%ld", port); 2277 vmc->hd = qemu_chr_open(name, devname, NULL); 2278 if (!vmc->hd) { 2279 config_error(mon, "could not open vmchannel device '%s'\n", 2280 devname); 2281 ret = -1; 2282 goto out; 2283 } 2284 vmc->port = port; 2285 slirp_add_exec(3, vmc->hd, 4, port); 2286 qemu_chr_add_handlers(vmc->hd, vmchannel_can_read, vmchannel_read, 2287 NULL, vmc); 2288 ret = 0; 2289 } else 2290 #endif 2291 #ifdef _WIN32 2292 if (!strcmp(device, "tap")) { 2293 static const char * const tap_params[] = { 2294 "vlan", "name", "ifname", NULL 2295 }; 2296 char ifname[64]; 2297 2298 if (check_params(buf, sizeof(buf), tap_params, p) < 0) { 2299 config_error(mon, "invalid parameter '%s' in '%s'\n", buf, p); 2300 ret = -1; 2301 goto out; 2302 } 2303 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) { 2304 config_error(mon, "tap: no interface name\n"); 2305 ret = -1; 2306 goto out; 2307 } 2308 vlan->nb_host_devs++; 2309 ret = tap_win32_init(vlan, device, name, ifname); 2310 } else 2311 #elif defined (_AIX) 2312 #else 2313 if (!strcmp(device, "tap")) { 2314 char ifname[64], chkbuf[64]; 2315 char setup_script[1024], down_script[1024]; 2316 int fd; 2317 vlan->nb_host_devs++; 2318 if (get_param_value(buf, sizeof(buf), "fd", p) > 0) { 2319 if (check_params(chkbuf, sizeof(chkbuf), fd_params, p) < 0) { 2320 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2321 ret = -1; 2322 goto out; 2323 } 2324 fd = strtol(buf, NULL, 0); 2325 fcntl(fd, F_SETFL, O_NONBLOCK); 2326 net_tap_fd_init(vlan, device, name, fd); 2327 ret = 0; 2328 } else { 2329 static const char * const tap_params[] = { 2330 "vlan", "name", "ifname", "script", "downscript", NULL 2331 }; 2332 if (check_params(chkbuf, sizeof(chkbuf), tap_params, p) < 0) { 2333 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2334 ret = -1; 2335 goto out; 2336 } 2337 if (get_param_value(ifname, sizeof(ifname), "ifname", p) <= 0) { 2338 ifname[0] = '\0'; 2339 } 2340 if (get_param_value(setup_script, sizeof(setup_script), "script", p) == 0) { 2341 pstrcpy(setup_script, sizeof(setup_script), DEFAULT_NETWORK_SCRIPT); 2342 } 2343 if (get_param_value(down_script, sizeof(down_script), "downscript", p) == 0) { 2344 pstrcpy(down_script, sizeof(down_script), DEFAULT_NETWORK_DOWN_SCRIPT); 2345 } 2346 ret = net_tap_init(vlan, device, name, ifname, setup_script, down_script); 2347 } 2348 } else 2349 #endif 2350 if (!strcmp(device, "socket")) { 2351 char chkbuf[64]; 2352 if (get_param_value(buf, sizeof(buf), "fd", p) > 0) { 2353 int fd; 2354 if (check_params(chkbuf, sizeof(chkbuf), fd_params, p) < 0) { 2355 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2356 ret = -1; 2357 goto out; 2358 } 2359 fd = strtol(buf, NULL, 0); 2360 ret = -1; 2361 if (net_socket_fd_init(vlan, device, name, fd, 1)) 2362 ret = 0; 2363 } else if (get_param_value(buf, sizeof(buf), "listen", p) > 0) { 2364 static const char * const listen_params[] = { 2365 "vlan", "name", "listen", NULL 2366 }; 2367 if (check_params(chkbuf, sizeof(chkbuf), listen_params, p) < 0) { 2368 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2369 ret = -1; 2370 goto out; 2371 } 2372 ret = net_socket_listen_init(vlan, device, name, buf); 2373 } else if (get_param_value(buf, sizeof(buf), "connect", p) > 0) { 2374 static const char * const connect_params[] = { 2375 "vlan", "name", "connect", NULL 2376 }; 2377 if (check_params(chkbuf, sizeof(chkbuf), connect_params, p) < 0) { 2378 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2379 ret = -1; 2380 goto out; 2381 } 2382 ret = net_socket_connect_init(vlan, device, name, buf); 2383 } else if (get_param_value(buf, sizeof(buf), "mcast", p) > 0) { 2384 static const char * const mcast_params[] = { 2385 "vlan", "name", "mcast", NULL 2386 }; 2387 if (check_params(chkbuf, sizeof(chkbuf), mcast_params, p) < 0) { 2388 config_error(mon, "invalid parameter '%s' in '%s'\n", chkbuf, p); 2389 ret = -1; 2390 goto out; 2391 } 2392 ret = net_socket_mcast_init(vlan, device, name, buf); 2393 } else { 2394 config_error(mon, "Unknown socket options: %s\n", p); 2395 ret = -1; 2396 goto out; 2397 } 2398 vlan->nb_host_devs++; 2399 } else 2400 #ifdef CONFIG_VDE 2401 if (!strcmp(device, "vde")) { 2402 static const char * const vde_params[] = { 2403 "vlan", "name", "sock", "port", "group", "mode", NULL 2404 }; 2405 char vde_sock[1024], vde_group[512]; 2406 int vde_port, vde_mode; 2407 2408 if (check_params(buf, sizeof(buf), vde_params, p) < 0) { 2409 config_error(mon, "invalid parameter '%s' in '%s'\n", buf, p); 2410 ret = -1; 2411 goto out; 2412 } 2413 vlan->nb_host_devs++; 2414 if (get_param_value(vde_sock, sizeof(vde_sock), "sock", p) <= 0) { 2415 vde_sock[0] = '\0'; 2416 } 2417 if (get_param_value(buf, sizeof(buf), "port", p) > 0) { 2418 vde_port = strtol(buf, NULL, 10); 2419 } else { 2420 vde_port = 0; 2421 } 2422 if (get_param_value(vde_group, sizeof(vde_group), "group", p) <= 0) { 2423 vde_group[0] = '\0'; 2424 } 2425 if (get_param_value(buf, sizeof(buf), "mode", p) > 0) { 2426 vde_mode = strtol(buf, NULL, 8); 2427 } else { 2428 vde_mode = 0700; 2429 } 2430 ret = net_vde_init(vlan, device, name, vde_sock, vde_port, vde_group, vde_mode); 2431 } else 2432 #endif 2433 if (!strcmp(device, "dump")) { 2434 int len = 65536; 2435 2436 if (get_param_value(buf, sizeof(buf), "len", p) > 0) { 2437 len = strtol(buf, NULL, 0); 2438 } 2439 if (!get_param_value(buf, sizeof(buf), "file", p)) { 2440 snprintf(buf, sizeof(buf), "qemu-vlan%d.pcap", vlan_id); 2441 } 2442 ret = net_dump_init(mon, vlan, device, name, buf, len); 2443 } else { 2444 config_error(mon, "Unknown network device: %s\n", device); 2445 ret = -1; 2446 goto out; 2447 } 2448 if (ret < 0) { 2449 config_error(mon, "Could not initialize device '%s'\n", device); 2450 } 2451 out: 2452 g_free(name); 2453 return ret; 2454 } 2455 2456 void net_client_uninit(NICInfo *nd) 2457 { 2458 nd->vlan->nb_guest_devs--; 2459 nb_nics--; 2460 nd->used = 0; 2461 free((void *)nd->model); 2462 } 2463 2464 static int net_host_check_device(const char *device) 2465 { 2466 int i; 2467 const char *valid_param_list[] = { "tap", "socket", "dump" 2468 #ifdef CONFIG_SLIRP 2469 ,"user" 2470 #endif 2471 #ifdef CONFIG_VDE 2472 ,"vde" 2473 #endif 2474 }; 2475 for (i = 0; i < sizeof(valid_param_list) / sizeof(char *); i++) { 2476 if (!strncmp(valid_param_list[i], device, 2477 strlen(valid_param_list[i]))) 2478 return 1; 2479 } 2480 2481 return 0; 2482 } 2483 2484 void net_host_device_add(Monitor *mon, const char *device, const char *opts) 2485 { 2486 if (!net_host_check_device(device)) { 2487 monitor_printf(mon, "invalid host network device %s\n", device); 2488 return; 2489 } 2490 if (net_client_init(mon, device, opts ? opts : "") < 0) { 2491 monitor_printf(mon, "adding host network device %s failed\n", device); 2492 } 2493 } 2494 2495 void net_host_device_remove(Monitor *mon, int vlan_id, const char *device) 2496 { 2497 VLANState *vlan; 2498 VLANClientState *vc; 2499 2500 vlan = qemu_find_vlan(vlan_id); 2501 2502 for (vc = vlan->first_client; vc != NULL; vc = vc->next) { 2503 if (!strcmp(vc->name, device)) { 2504 break; 2505 } 2506 } 2507 2508 if (!vc) { 2509 monitor_printf(mon, "can't find device %s\n", device); 2510 return; 2511 } 2512 if (!net_host_check_device(vc->model)) { 2513 monitor_printf(mon, "invalid host network device %s\n", device); 2514 return; 2515 } 2516 qemu_del_vlan_client(vc); 2517 } 2518 2519 int net_client_parse(const char *str) 2520 { 2521 const char *p; 2522 char *q; 2523 char device[64]; 2524 2525 p = str; 2526 q = device; 2527 while (*p != '\0' && *p != ',') { 2528 if ((q - device) < sizeof(device) - 1) 2529 *q++ = *p; 2530 p++; 2531 } 2532 *q = '\0'; 2533 if (*p == ',') 2534 p++; 2535 2536 return net_client_init(NULL, device, p); 2537 } 2538 2539 void do_info_network(Monitor *mon) 2540 { 2541 VLANState *vlan; 2542 VLANClientState *vc; 2543 2544 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) { 2545 monitor_printf(mon, "VLAN %d devices:\n", vlan->id); 2546 for(vc = vlan->first_client; vc != NULL; vc = vc->next) 2547 monitor_printf(mon, " %s: %s\n", vc->name, vc->info_str); 2548 } 2549 } 2550 2551 int do_set_link(Monitor *mon, const char *name, const char *up_or_down) 2552 { 2553 VLANState *vlan; 2554 VLANClientState *vc = NULL; 2555 2556 for (vlan = first_vlan; vlan != NULL; vlan = vlan->next) 2557 for (vc = vlan->first_client; vc != NULL; vc = vc->next) 2558 if (strcmp(vc->name, name) == 0) 2559 goto done; 2560 done: 2561 2562 if (!vc) { 2563 monitor_printf(mon, "could not find network device '%s'", name); 2564 return 0; 2565 } 2566 2567 if (strcmp(up_or_down, "up") == 0) 2568 vc->link_down = 0; 2569 else if (strcmp(up_or_down, "down") == 0) 2570 vc->link_down = 1; 2571 else 2572 monitor_printf(mon, "invalid link status '%s'; only 'up' or 'down' " 2573 "valid\n", up_or_down); 2574 2575 if (vc->link_status_changed) 2576 vc->link_status_changed(vc); 2577 2578 return 1; 2579 } 2580 2581 void net_cleanup(void) 2582 { 2583 VLANState *vlan; 2584 2585 /* close network clients */ 2586 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) { 2587 VLANClientState *vc = vlan->first_client; 2588 2589 while (vc) { 2590 VLANClientState *next = vc->next; 2591 2592 qemu_del_vlan_client(vc); 2593 2594 vc = next; 2595 } 2596 } 2597 } 2598 2599 void net_client_check(void) 2600 { 2601 VLANState *vlan; 2602 2603 for(vlan = first_vlan; vlan != NULL; vlan = vlan->next) { 2604 if (vlan->nb_guest_devs == 0 && vlan->nb_host_devs == 0) 2605 continue; 2606 if (vlan->nb_guest_devs == 0) 2607 fprintf(stderr, "Warning: vlan %d with no nics\n", vlan->id); 2608 if (vlan->nb_host_devs == 0) 2609 fprintf(stderr, 2610 "Warning: vlan %d is not connected to host network\n", 2611 vlan->id); 2612 } 2613 } 2614 2615 int 2616 android_parse_network_speed(const char* speed) 2617 { 2618 int n; 2619 char* end; 2620 double sp; 2621 2622 if (speed == NULL || speed[0] == 0) { 2623 speed = DEFAULT_NETSPEED; 2624 } 2625 2626 for (n = 0; android_netspeeds[n].name != NULL; n++) { 2627 if (!strcmp(android_netspeeds[n].name, speed)) { 2628 qemu_net_download_speed = android_netspeeds[n].download; 2629 qemu_net_upload_speed = android_netspeeds[n].upload; 2630 return 0; 2631 } 2632 } 2633 2634 /* is this a number ? */ 2635 sp = strtod(speed, &end); 2636 if (end == speed) { 2637 return -1; 2638 } 2639 2640 qemu_net_download_speed = qemu_net_upload_speed = sp*1000.; 2641 if (*end == ':') { 2642 speed = end+1; 2643 sp = strtod(speed, &end); 2644 if (end > speed) { 2645 qemu_net_download_speed = sp*1000.; 2646 } 2647 } 2648 2649 if (android_modem) 2650 amodem_set_data_network_type( android_modem, 2651 android_parse_network_type(speed) ); 2652 return 0; 2653 } 2654 2655 2656 int 2657 android_parse_network_latency(const char* delay) 2658 { 2659 int n; 2660 char* end; 2661 double sp; 2662 2663 if (delay == NULL || delay[0] == 0) 2664 delay = DEFAULT_NETDELAY; 2665 2666 for (n = 0; android_netdelays[n].name != NULL; n++) { 2667 if ( !strcmp( android_netdelays[n].name, delay ) ) { 2668 qemu_net_min_latency = android_netdelays[n].min_ms; 2669 qemu_net_max_latency = android_netdelays[n].max_ms; 2670 return 0; 2671 } 2672 } 2673 2674 /* is this a number ? */ 2675 sp = strtod(delay, &end); 2676 if (end == delay) { 2677 return -1; 2678 } 2679 2680 qemu_net_min_latency = qemu_net_max_latency = (int)sp; 2681 if (*end == ':') { 2682 delay = (const char*)end+1; 2683 sp = strtod(delay, &end); 2684 if (end > delay) { 2685 qemu_net_max_latency = (int)sp; 2686 } 2687 } 2688 return 0; 2689 } 2690