Changeset 30016 in vbox
- Timestamp:
- Jun 3, 2010 6:31:14 PM (15 years ago)
- Location:
- trunk/src/VBox/Devices
- Files:
-
- 3 deleted
- 25 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Makefile.kmk
r29590 r30016 823 823 endif 824 824 825 VBOX_WITH_SLIRP_BSD_MBUF=1826 827 825 Drivers_INCS := \ 828 826 $(PATH_SUB_CURRENT) \ … … 857 855 Network/slirp/bootp.c \ 858 856 Network/slirp/debug.c \ 859 Network/slirp/if.c \860 857 Network/slirp/ip_icmp.c \ 861 858 Network/slirp/ip_input.c \ … … 874 871 Network/slirp/dnsproxy/dnsproxy.c 875 872 876 ifdef VBOX_WITH_SLIRP_BSD_MBUF 877 VBOX_SLIRP_BSD_ARCH = $(subst x86,i386,$(KBUILD_TARGET_ARCH)) 878 VBOX_SLIRP_BSD_SOURCES += \ 879 Network/slirp/bsd/kern/kern_mbuf.c \ 880 Network/slirp/bsd/kern/uipc_mbuf.c \ 881 Network/slirp/bsd/kern/uipc_mbuf2.c \ 882 Network/slirp/bsd/$(VBOX_SLIRP_BSD_ARCH)/in_cksum.c 883 else 884 # some notes dnsproxy will probably deprecate 885 VBOX_SLIRP_SOURCES += \ 886 Network/slirp/mbuf.c \ 887 Network/slirp/cksum.c 888 endif 873 VBOX_SLIRP_BSD_ARCH = $(subst x86,i386,$(KBUILD_TARGET_ARCH)) 874 VBOX_SLIRP_BSD_SOURCES += \ 875 Network/slirp/bsd/kern/kern_mbuf.c \ 876 Network/slirp/bsd/kern/uipc_mbuf.c \ 877 Network/slirp/bsd/kern/uipc_mbuf2.c \ 878 Network/slirp/bsd/$(VBOX_SLIRP_BSD_ARCH)/in_cksum.c 889 879 890 880 VBOX_SLIRP_ALIAS_SOURCES = \ … … 905 895 $(if $(VBOX_WITH_SLIRP_MEMORY_CHECK),RTMEM_WRAP_TO_EF_APIS,) \ 906 896 $(if $(VBOX_WITH_DEBUG_NAT_SOCKETS),VBOX_WITH_DEBUG_NAT_SOCKETS,) \ 907 $(if $(VBOX_WITH_SLIRP_MT),VBOX_WITH_SLIRP_MT,) \ 908 $(if $(VBOX_WITH_SLIRP_BSD_MBUF),VBOX_WITH_SLIRP_BSD_MBUF,) 909 ifdef VBOX_WITH_SLIRP_BSD_MBUF 910 $(file)_INCS += $(1)/slirp/bsd/sys 911 $(file)_INCS += $(1)/slirp/bsd/sys/sys 912 $(file)_INCS += $(1)/slirp/bsd/$(VBOX_SLIRP_BSD_ARCH)/include 913 $(file)_INCS += $(1)/slirp/bsd/netinet 914 endif 897 $(if $(VBOX_WITH_SLIRP_MT),VBOX_WITH_SLIRP_MT,) 898 $(file)_INCS += $(1)/slirp/bsd/sys 899 $(file)_INCS += $(1)/slirp/bsd/sys/sys 900 $(file)_INCS += $(1)/slirp/bsd/$(VBOX_SLIRP_BSD_ARCH)/include 901 $(file)_INCS += $(1)/slirp/bsd/netinet 915 902 $(file)_INCS += $(1)/slirp 916 903 $(file)_INCS += $(1)/slirp/libalias … … 919 906 else 920 907 $(file)_CFLAGS += -Wno-sign-compare 921 ifdef VBOX_WITH_SLIRP_BSD_MBUF 922 $(file)_CFLAGS += -Wno-format 923 $(file)_CFLAGS += -Wno-bad-function-cast 924 endif 908 $(file)_CFLAGS += -Wno-format 909 $(file)_CFLAGS += -Wno-bad-function-cast 925 910 endif 926 911 endef … … 942 927 $(foreach file,$(VBOX_SLIRP_ALIAS_SOURCES),$(eval $(call def_vbox_slirp_alias_cflags, Network))) 943 928 944 ifdef VBOX_WITH_SLIRP_BSD_MBUF945 929 VBOX_SLIRP_BSD_SOURCES += $(VBOX_SLIRP_BSD_SOURCES.${KBUILD_TARGET_ARCH}) 946 930 Drivers_SOURCES += $(VBOX_SLIRP_BSD_SOURCES) … … 951 935 $(foreach file,$(VBOX_SLIRP_BSD_SOURCES),$(eval $(call def_vbox_slirp_cflags, Network))) 952 936 $(foreach file,$(VBOX_SLIRP_BSD_SOURCES),$(eval $(call def_vbox_slirp_bsd_cflags, Network))) 953 endif954 937 955 938 ifdef VBOX_WITH_DRV_DISK_INTEGRITY -
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r28800 r30016 284 284 285 285 slirp_ext_m_free(pThis->pNATState, m); 286 #ifdef VBOX_WITH_SLIRP_BSD_MBUF287 286 RTMemFree(pu8Buf); 288 #endif289 287 if (ASMAtomicDecU32(&pThis->cUrgPkts) == 0) 290 288 { … … 331 329 done_unlocked: 332 330 slirp_ext_m_free(pThis->pNATState, m); 333 #ifdef VBOX_WITH_SLIRP_BSD_MBUF334 331 RTMemFree(pu8Buf); 335 #endif336 332 ASMAtomicDecU32(&pThis->cPkts); 337 333 … … 1123 1119 int fUseHostResolver = 0; 1124 1120 GET_S32(rc, pThis, pCfg, "UseHostResolver", fUseHostResolver); 1125 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1126 1121 int MTU = 1500; 1127 1122 GET_S32(rc, pThis, pCfg, "SlirpMTU", MTU); 1128 #endif1129 1123 int i32AliasMode = 0; 1130 1124 int i32MainAliasMode = 0; … … 1175 1169 slirp_set_dhcp_next_server(pThis->pNATState, pThis->pszNextServer); 1176 1170 slirp_set_dhcp_dns_proxy(pThis->pNATState, !!fDNSProxy); 1177 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1178 1171 slirp_set_mtu(pThis->pNATState, MTU); 1179 #endif1180 1172 char *pszBindIP = NULL; 1181 1173 GET_STRING_ALLOC(rc, pThis, pCfg, "BindIP", pszBindIP); -
trunk/src/VBox/Devices/Network/slirp/bootp.c
r30013 r30016 674 674 } 675 675 676 #ifndef VBOX_WITH_SLIRP_BSD_MBUF677 if ((m = m_get(pData)) == NULL)678 #else679 676 if ((m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR)) == NULL) 680 #endif681 677 { 682 678 LogRel(("NAT: can't alocate memory for response!\n")); … … 759 755 *q++ = RFC1533_END; /* end of message */ 760 756 761 #ifdef VBOX_WITH_SLIRP_BSD_MBUF762 757 m->m_pkthdr.header = mtod(m, void *); 763 #endif764 758 m->m_len = sizeof(struct bootp_t) 765 759 - sizeof(struct ip) -
trunk/src/VBox/Devices/Network/slirp/debug.c
r28800 r30016 179 179 mbufstats(PNATState pData) 180 180 { 181 #ifndef VBOX_WITH_SLIRP_BSD_MBUF182 181 /* 183 182 * (vvl) this static code can't work with mbuf zone anymore 184 183 * @todo: make statistic correct 185 184 */ 186 #if 0187 struct mbuf *m;188 int i;189 190 lprint(" \n");191 192 lprint("Mbuf stats:\n");193 194 lprint(" %6d mbufs allocated (%d max)\n", mbuf_alloced, mbuf_max);195 196 i = 0;197 for (m = m_freelist.m_next; m != &m_freelist; m = m->m_next)198 i++;199 lprint(" %6d mbufs on free list\n", i);200 201 i = 0;202 for (m = m_usedlist.m_next; m != &m_usedlist; m = m->m_next)203 i++;204 lprint(" %6d mbufs on used list\n", i);205 lprint(" %6d mbufs queued as packets\n\n", if_queued);206 #endif207 #endif208 185 } 209 186 -
trunk/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
r26495 r30016 133 133 return; 134 134 } 135 #ifndef VBOX_WITH_SLIRP_BSD_MBUF136 m = m_get(pData);137 #else138 135 m = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR); 139 #endif140 136 if (m == NULL) 141 137 { -
trunk/src/VBox/Devices/Network/slirp/ext.h
r28800 r30016 16 16 */ 17 17 18 #ifdef VBOX_WITH_SLIRP_BSD_MBUF19 18 # ifndef IN_BSD 20 # 21 # 22 # 23 # 24 # 25 # 26 # 19 # define zone_mbuf slirp_zone_mbuf(pData) 20 # define zone_clust slirp_zone_clust(pData) 21 # define zone_pack slirp_zone_pack(pData) 22 # define zone_jumbop slirp_zone_jumbop(pData) 23 # define zone_jumbo9 slirp_zone_jumbo9(pData) 24 # define zone_jumbo16 slirp_zone_jumbo16(pData) 25 # define zone_ext_refcnt slirp_zone_ext_refcnt(pData) 27 26 static inline uma_zone_t slirp_zone_mbuf(PNATState); 28 27 static inline uma_zone_t slirp_zone_clust(PNATState); … … 32 31 static inline uma_zone_t slirp_zone_jumbo16(PNATState); 33 32 static inline uma_zone_t slirp_zone_ext_refcnt(PNATState); 34 # 35 # 36 # 37 # 38 # 39 # 40 # 41 # 33 #else 34 # undef zone_mbuf 35 # undef zone_clust 36 # undef zone_pack 37 # undef zone_jumbop 38 # undef zone_jumbo9 39 # undef zone_jumbo16 40 # undef zone_ext_refcnt 42 41 43 # define zone_mbuf pData->zone_mbuf 44 # define zone_clust pData->zone_clust 45 # define zone_pack pData->zone_pack 46 # define zone_jumbop pData->zone_jumbop 47 # define zone_jumbo9 pData->zone_jumbo9 48 # define zone_jumbo16 pData->zone_jumbo16 49 # define zone_ext_refcnt pData->zone_ext_refcnt 50 # endif 42 # define zone_mbuf pData->zone_mbuf 43 # define zone_clust pData->zone_clust 44 # define zone_pack pData->zone_pack 45 # define zone_jumbop pData->zone_jumbop 46 # define zone_jumbo9 pData->zone_jumbo9 47 # define zone_jumbo16 pData->zone_jumbo16 48 # define zone_ext_refcnt pData->zone_ext_refcnt 51 49 #endif 52 50 -
trunk/src/VBox/Devices/Network/slirp/if.h
r28800 r30016 33 33 #define IF_NOCIDCOMP 0x08 /* CID compression */ 34 34 35 /* Needed for FreeBSD */36 #undef if_mtu37 extern int if_mtu;38 extern int if_mru; /* MTU and MRU */39 extern int if_comp; /* Flags for compression */40 extern int if_maxlinkhdr;41 extern int if_queued; /* Number of packets queued so far */42 extern int if_thresh; /* Number of packets queued before we start sending43 * (to prevent allocing too many mbufs) */44 45 extern struct mbuf if_fastq; /* fast queue (for interactive data) */46 extern struct mbuf if_batchq; /* queue for non-interactive data */47 extern struct mbuf *next_m;48 49 #define ifs_init(ifm) ((ifm)->ifs_next = (ifm)->ifs_prev = (ifm))50 35 51 36 #ifdef ETH_P_ARP -
trunk/src/VBox/Devices/Network/slirp/ip_icmp.c
r28800 r30016 361 361 m->m_len -= hlen; 362 362 m->m_data += hlen; 363 #ifndef VBOX_WITH_SLIRP_BSD_MBUF364 icp = mtod(m, struct icmp *);365 #else366 363 if (m->m_next != NULL) 367 364 { … … 374 371 icp = mtod(m, struct icmp *); 375 372 } 376 #endif377 373 if (cksum(m, icmplen)) 378 374 { … … 505 501 m_freem(pData, m); 506 502 } /* switch */ 507 #ifdef VBOX_WITH_SLIRP_BSD_MBUF508 503 if (m->m_next != NULL && icp != NULL) 509 504 RTMemFree(icp); 510 #endif511 505 512 506 end_error: … … 547 541 DEBUG_ARG("msrc = %lx", (long )msrc); 548 542 DEBUG_ARG("msrc_len = %d", msrc ? msrc->m_len : 0); 549 #ifdef VBOX_WITH_SLIRP_BSD_MBUF550 543 if (msrc != NULL) 551 544 M_ASSERTPKTHDR(msrc); 552 #endif553 545 554 546 if (type!=ICMP_UNREACH && type!=ICMP_TIMXCEED && type != ICMP_SOURCEQUENCH) … … 584 576 } 585 577 586 #ifndef VBOX_WITH_SLIRP_BSD_MBUF587 /* make a copy */588 m = m_get(pData);589 #else590 578 new_m_size = sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN; 591 579 if (new_m_size < MSIZE) … … 610 598 } 611 599 m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size); 612 #endif 600 613 601 if (m == NULL) 614 602 goto end_error; /* get mbuf */ 615 603 616 604 m->m_data += if_maxlinkhdr; 617 #ifdef VBOX_WITH_SLIRP_BSD_MBUF618 605 m->m_pkthdr.header = mtod(m, void *); 619 #else620 new_m_size = if_maxlinkhdr + sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN;621 if (new_m_size > m->m_size)622 {623 m_inc(m, new_m_size);624 if (new_m_size > m->m_size)625 goto end_error_free_m;626 }627 #endif628 606 629 607 memcpy(m->m_data, msrc->m_data, msrc->m_len); … … 670 648 message_len = ICMP_MAXDATALEN; 671 649 cpnt = (char *)m->m_data+m->m_len; 672 #ifndef VBOX_WITH_SLIRP_BSD_MBUF673 memcpy(cpnt, message, message_len);674 m->m_len += message_len;675 #else676 650 m_append(pData, m, message_len, message); 677 #endif678 651 } 679 652 #endif … … 681 654 icp->icmp_cksum = 0; 682 655 icp->icmp_cksum = cksum(m, m->m_len); 683 684 #ifndef VBOX_WITH_SLIRP_BSD_MBUF685 m->m_data -= hlen;686 m->m_len += hlen;687 #endif688 656 689 657 /* fill in ip */ -
trunk/src/VBox/Devices/Network/slirp/ip_input.c
r28800 r30016 91 91 struct ip *pip = NULL; 92 92 93 #ifndef VBOX_WITH_SLIRP_BSD_MBUF94 if (m->m_la)95 return m->m_la;96 #else97 93 struct m_tag *t; 98 94 if ((t = m_tag_find(m, PACKET_TAG_ALIAS, NULL)) != 0) 99 95 return (struct libalias *)&t[1]; 100 #endif101 96 102 97 return la; … … 391 386 } 392 387 393 #ifndef VBOX_WITH_SLIRP_BSD_MBUF394 #define GETIP(m) ((struct ip*)(MBUF_IP_HEADER(m)))395 #else396 388 #define GETIP(m) ((struct ip*)((m)->m_pkthdr.header)) 397 #endif398 399 389 400 390 /* -
trunk/src/VBox/Devices/Network/slirp/ip_output.c
r28800 r30016 123 123 DEBUG_ARG("m0 = %lx", (long)m0); 124 124 125 #ifndef VBOX_WITH_SLIRP_BSD_MBUF126 if(m->m_data != (MBUF_HEAD(m) + if_maxlinkhdr))127 {128 LogRel(("NAT: ethernet detects corruption of the packet"));129 AssertMsgFailed(("!!Ethernet frame corrupted!!"));130 }131 #else132 125 M_ASSERTPKTHDR(m); 133 126 Assert(m->m_pkthdr.header); 134 #endif135 127 136 128 #if 0 /* We do no options */ … … 151 143 ipstat.ips_localout++; 152 144 153 /*154 * Verify that we have any chance at all of being able to queue155 * the packet or packet fragments156 */157 #if 0 /* XXX Hmmm... */158 if (if_queued > if_thresh && towrite <= 0)159 {160 error = ENOBUFS;161 goto exit_drop_package;162 }163 #endif164 145 /* Current TCP/IP stack hasn't routing information at 165 146 * all so we need to calculate destination ethernet address 166 */167 #ifndef VBOX_WITH_SLIRP_BSD_MBUF168 eh = (struct ethhdr *)MBUF_HEAD(m);169 if (memcmp(eh->h_source, zerro_ethaddr, ETH_ALEN) == 0)170 {171 rc = rt_lookup_in_cache(pData, ip->ip_dst.s_addr, eth_dst);172 if (RT_FAILURE(rc))173 goto exit_drop_package;174 }175 else176 {177 memcpy(eth_dst, eh->h_source, ETH_ALEN);178 rc = 0; /*some times we've already know where to send packet*/179 }180 #else181 /*182 * (vvl) Assumption is that m_data points at the IP header and only183 * in case of dhcp we know and have header before IP.184 147 */ 185 148 rc = rt_lookup_in_cache(pData, ip->ip_dst.s_addr, eth_dst); … … 188 151 189 152 eh = (struct ethhdr *)(m->m_data - ETH_HLEN); 190 #endif191 153 /* 192 154 * If small enough for interface, can just send directly. … … 200 162 201 163 { 202 #ifndef VBOX_WITH_SLIRP_BSD_MBUF203 STAM_PROFILE_START(&pData->StatALIAS_output, b);204 rc = LibAliasOut((m->m_la ? m->m_la : pData->proxy_alias),205 mtod(m, char *), m->m_len);206 Log2(("NAT: LibAlias return %d\n", rc));207 #else208 164 struct m_tag *t; 209 165 STAM_PROFILE_START(&pData->StatALIAS_output, b); … … 220 176 goto exit_drop_package; 221 177 } 222 #endif223 178 STAM_PROFILE_STOP(&pData->StatALIAS_output, b); 224 179 } … … 251 206 int mhlen, firstlen = len; 252 207 struct mbuf **mnext = &m->m_nextpkt; 253 #ifdef VBOX_WITH_SLIRP_BSD_MBUF254 208 char *buf; /* intermediate buffer we'll use for copy from orriginal packet */ 255 #endif256 209 { 257 #ifdef VBOX_WITH_SLIRP_BSD_MBUF258 210 struct m_tag *t; 259 211 char *tmpbuf = NULL; 260 212 int tmplen = 0; 261 #endif262 213 int rcLa; 263 214 HTONS(ip->ip_len); … … 265 216 ip->ip_sum = 0; 266 217 ip->ip_sum = cksum(m, hlen); 267 #ifndef VBOX_WITH_SLIRP_BSD_MBUF268 rcLa = LibAliasOut((m->m_la ? m->m_la : pData->proxy_alias),269 mtod(m, char *), m->m_len);270 #else271 218 if (m->m_next != NULL) 272 219 { … … 304 251 goto exit_drop_package; 305 252 } 306 #endif307 253 NTOHS(ip->ip_len); 308 254 NTOHS(ip->ip_off); … … 319 265 { 320 266 register struct ip *mhip; 321 #ifndef VBOX_WITH_SLIRP_BSD_MBUF322 m = m_get(pData);323 #else324 267 m = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR); 325 #endif326 268 if (m == 0) 327 269 { … … 334 276 *mhip = *ip; 335 277 m->m_len += ip->ip_hl << 2; 336 #ifdef VBOX_WITH_SLIRP_BSD_MBUF337 278 m->m_pkthdr.header = mtod(m, void *); 338 #endif339 279 /* we've calculated eth_dst for first packet */ 340 280 #if 0 /* No options */ … … 354 294 mhip->ip_len = RT_H2N_U16((u_int16_t)(len + mhlen)); 355 295 356 #ifndef VBOX_WITH_SLIRP_BSD_MBUF357 if (m_copy(m, m0, off, len) < 0)358 {359 error = -1;360 goto sendorfree;361 }362 #else363 296 buf = RTMemAlloc(len); 364 297 m_copydata(m0, off, len, buf); /* copy to buffer */ … … 369 302 RTMemFree(buf); 370 303 m->m_len += RT_N2H_U16(mhip->ip_len); 371 #endif372 304 373 305 mhip->ip_off = RT_H2N_U16((u_int16_t)mhip->ip_off); … … 396 328 if (error == 0) 397 329 { 398 #ifndef VBOX_WITH_SLIRP_BSD_MBUF399 eh = (struct ethhdr *)MBUF_HEAD(m);400 #else401 330 m->m_data -= ETH_HLEN; 402 331 eh = mtod(m, struct ethhdr *); 403 332 m->m_data += ETH_HLEN; 404 #endif405 333 memcpy(eh->h_source, eth_dst, ETH_ALEN); 406 334 -
trunk/src/VBox/Devices/Network/slirp/libalias/alias.c
r26495 r30016 1666 1666 #endif 1667 1667 1668 #if defined(_KERNEL) || (defined(VBOX) && defined(VBOX_WITH_SLIRP_BSD_MBUF))1668 #if defined(_KERNEL) || defined(VBOX) 1669 1669 /* 1670 1670 * m_megapullup() - this function is a big hack. -
trunk/src/VBox/Devices/Network/slirp/libslirp.h
r28800 r30016 88 88 89 89 int slirp_set_binding_address(PNATState, char *addr); 90 #ifdef VBOX_WITH_SLIRP_BSD_MBUF91 90 void slirp_set_mtu(PNATState, int); 92 #endif93 91 94 92 #if defined(RT_OS_WINDOWS) … … 130 128 struct mbuf *slirp_ext_m_get(PNATState pData, size_t cbMin, void **ppvBuf, size_t *pcbBuf); 131 129 void slirp_ext_m_free(PNATState pData, struct mbuf *); 132 #ifndef VBOX_WITH_SLIRP_BSD_MBUF133 void slirp_push_recv_thread(void *pvUser);134 #endif135 130 136 131 /* -
trunk/src/VBox/Devices/Network/slirp/misc.c
r30013 r30016 97 97 98 98 99 #ifdef VBOX_WITH_SLIRP_BSD_MBUF100 99 #define ITEM_MAGIC 0xdead0001 101 100 struct item … … 445 444 /*@todo do finalize here.*/ 446 445 } 447 #endif /* VBOX_WITH_SLIRP_BSD_MBUF */ 446 447 void 448 if_init(PNATState pData) 449 { 450 /* 14 for ethernet */ 451 if_maxlinkhdr = 14; 452 if_comp = IF_AUTOCOMP; 453 if_mtu = 1500; 454 if_mru = 1500; 455 } -
trunk/src/VBox/Devices/Network/slirp/misc.h
r28800 r30016 34 34 void fd_nonblock (int); 35 35 36 #ifdef VBOX_WITH_SLIRP_BSD_MBUF37 36 /* UVM interface */ 38 37 #define UMA_ALIGN_PTR (1 << 0) … … 68 67 void slirp_null_arg_free(void *, void *); 69 68 void m_fini(PNATState pData); 70 #endif /* VBOX_WITH_SLIRP_BSD_MBUF */71 69 72 70 #endif -
trunk/src/VBox/Devices/Network/slirp/sbuf.c
r28800 r30016 109 109 { 110 110 int ret = 0; 111 #ifdef VBOX_WITH_SLIRP_BSD_MBUF112 111 int mlen = 0; 113 112 caddr_t buf = NULL; 114 #endif115 113 116 114 STAM_PROFILE_START(&pData->StatIOSBAppend_pf, a); … … 122 120 STAM_COUNTER_INC(&pData->StatIOSBAppend); 123 121 /* Shouldn't happen, but... e.g. foreign host closes connection */ 124 #ifndef VBOX_WITH_SLIRP_BSD_MBUF125 if (m->m_len <= 0)126 #else127 122 mlen = m_length(m, NULL); 128 123 if (mlen <= 0) 129 #endif130 124 { 131 125 STAM_COUNTER_INC(&pData->StatIOSBAppend_zm); … … 150 144 * ottherwise it'll arrive out of order, and hence corrupt 151 145 */ 152 #ifndef VBOX_WITH_SLIRP_BSD_MBUF153 if(!so->so_rcv.sb_cc)154 ret = send(so->s, m->m_data, m->m_len, 0);155 #else156 146 buf = RTMemAlloc(mlen); 157 147 if (buf == NULL) … … 165 155 RTMemFree(buf); 166 156 no_sent: 167 #endif168 157 169 158 if (ret <= 0) … … 180 169 goto done; 181 170 } 182 #ifndef VBOX_WITH_SLIRP_BSD_MBUF183 else if (ret != m->m_len)184 #else185 171 else if (ret != mlen) 186 #endif187 172 { 188 173 STAM_COUNTER_INC(&pData->StatIOSBAppend_wp); … … 191 176 * sbappendsb the rest 192 177 */ 193 #ifndef VBOX_WITH_SLIRP_BSD_MBUF194 m->m_len -= ret;195 m->m_data += ret;196 #else197 178 m_adj(m, ret); 198 #endif199 179 sbappendsb(pData, &so->so_rcv, m); 200 180 STAM_PROFILE_STOP(&pData->StatIOSBAppend_pf_wp, a); … … 217 197 int len, n, nn; 218 198 219 #ifndef VBOX_WITH_SLIRP_BSD_MBUF220 len = m->m_len;221 #else222 199 len = m_length(m, NULL); 223 #endif224 200 225 201 STAM_COUNTER_INC(&pData->StatIOSBAppendSB); … … 230 206 if (n > len) 231 207 n = len; 232 #ifndef VBOX_WITH_SLIRP_BSD_MBUF233 memcpy(sb->sb_wptr, m->m_data, n);234 #else235 208 m_copydata(m, 0, n, sb->sb_wptr); 236 #endif237 209 } 238 210 else … … 243 215 if (n > len) 244 216 n = len; 245 #ifndef VBOX_WITH_SLIRP_BSD_MBUF246 memcpy(sb->sb_wptr, m->m_data, n);247 #else248 217 m_copydata(m, 0, n, sb->sb_wptr); 249 #endif250 218 len -= n; 251 219 if (len) … … 255 223 if (nn > len) 256 224 nn = len; 257 #ifndef VBOX_WITH_SLIRP_BSD_MBUF258 memcpy(sb->sb_data, m->m_data+n, nn);259 #else260 225 m_copydata(m, n, nn, sb->sb_data); 261 #endif262 226 n += nn; 263 227 } -
trunk/src/VBox/Devices/Network/slirp/slirp.c
r29946 r30016 626 626 627 627 /* Initialise mbufs *after* setting the MTU */ 628 #ifndef VBOX_WITH_SLIRP_BSD_MBUF629 m_init(pData);630 #else631 628 mbuf_init(pData); 632 #endif633 629 634 630 pData->special_addr.s_addr = u32NetAddr; … … 899 895 so->so_poll_index = -1; 900 896 #endif 901 #ifndef VBOX_WITH_SLIRP_BSD_MBUF902 if (pData->fmbuf_water_line == 1)903 {904 if (mbuf_alloced < pData->mbuf_water_line_limit/2)905 {906 pData->fmbuf_water_warn_sent = 0;907 pData->fmbuf_water_line = 0;908 }909 # ifndef RT_OS_WINDOWS910 poll_index = 0;911 # endif912 goto done;913 }914 #endif /* !VBOX_WITH_SLIRP_BSD_MBUF */915 897 STAM_COUNTER_INC(&pData->StatTCP); 916 898 … … 983 965 /* { */ 984 966 985 #ifndef VBOX_WITH_SLIRP_BSD_MBUF986 if (pData->fmbuf_water_line == 1)987 {988 if (mbuf_alloced < pData->mbuf_water_line_limit/2)989 {990 pData->fmbuf_water_line = 0;991 pData->fmbuf_water_warn_sent = 0;992 }993 # ifndef RT_OS_WINDOWS994 poll_index = 0;995 # endif996 goto done;997 }998 #endif /* !VBOX_WITH_SLIRP_BSD_MBUF */999 967 STAM_COUNTER_INC(&pData->StatUDP); 1000 968 #if !defined(RT_OS_WINDOWS) … … 1124 1092 QSOCKET_FOREACH(so, so_next, tcp) 1125 1093 /* { */ 1126 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1127 if (pData->fmbuf_water_line == 1)1128 {1129 if (mbuf_alloced < pData->mbuf_water_line_limit/2)1130 {1131 pData->fmbuf_water_line = 0;1132 pData->fmbuf_water_warn_sent = 0;1133 }1134 goto done;1135 }1136 #endif1137 1094 1138 1095 #ifdef VBOX_WITH_SLIRP_MT … … 1355 1312 QSOCKET_FOREACH(so, so_next, udp) 1356 1313 /* { */ 1357 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1358 if (pData->fmbuf_water_line == 1)1359 {1360 if (mbuf_alloced < pData->mbuf_water_line_limit/2)1361 {1362 pData->fmbuf_water_line = 0;1363 pData->fmbuf_water_warn_sent = 0;1364 }1365 goto done;1366 }1367 #endif1368 1314 #ifdef VBOX_WITH_SLIRP_MT 1369 1315 if ( so->so_state & SS_NOFDREF … … 1408 1354 1409 1355 done: 1410 #if 01411 /*1412 * See if we can start outputting1413 */1414 if (if_queued && link_up)1415 if_start(pData);1416 #endif1417 1356 1418 1357 STAM_PROFILE_STOP(&pData->StatPoll, a); … … 1458 1397 { 1459 1398 case ARPOP_REQUEST: 1460 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1461 mr = m_get(pData);1462 1463 reh = mtod(mr, struct ethhdr *);1464 memcpy(reh->h_source, eh->h_source, ETH_ALEN); /* XXX: if_encap will swap src and dst*/1465 Log4(("NAT: arp:%R[ether]->%R[ether]\n",1466 reh->h_source, reh->h_dest));1467 Log4(("NAT: arp: %R[IP4]\n", &tip));1468 1469 mr->m_data += if_maxlinkhdr;1470 mr->m_len = sizeof(struct arphdr);1471 rah = mtod(mr, struct arphdr *);1472 #else1473 1399 mr = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR); 1474 1400 if (mr == NULL) … … 1480 1406 Assert(mr); 1481 1407 memcpy(reh->h_source, eh->h_source, ETH_ALEN); /* XXX: if_encap will swap src and dst*/ 1482 #endif1483 1408 #ifdef VBOX_WITH_NAT_SERVICE 1484 1409 if (tip == pData->special_addr.s_addr) … … 1587 1512 updtime(pData); 1588 1513 m_adj(m, ETH_HLEN); 1589 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1590 1514 M_ASSERTPKTHDR(m); 1591 1515 m->m_pkthdr.header = mtod(m, void *); 1592 #else /* !VBOX_WITH_SLIRP_BSD_MBUF */1593 if ( pData->fmbuf_water_line1594 && pData->fmbuf_water_warn_sent == 01595 && (curtime - pData->tsmbuf_water_warn_sent) > 500)1596 {1597 icmp_error(pData, m, ICMP_SOURCEQUENCH, 0, 0, "Out of resources!!!");1598 pData->fmbuf_water_warn_sent = 1;1599 pData->tsmbuf_water_warn_sent = curtime;1600 }1601 #endif /* !VBOX_WITH_SLIRP_BSD_MBUF */1602 1516 ip_input(pData, m); 1603 1517 break; … … 1630 1544 STAM_PROFILE_START(&pData->StatIF_encap, a); 1631 1545 1632 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1633 m->m_data -= if_maxlinkhdr;1634 m->m_len += ETH_HLEN;1635 eh = mtod(m, struct ethhdr *);1636 1637 if (MBUF_HEAD(m) != m->m_data)1638 {1639 LogRel(("NAT: ethernet detects corruption of the packet"));1640 AssertMsgFailed(("!!Ethernet frame corrupted!!"));1641 }1642 #else1643 1546 M_ASSERTPKTHDR(m); 1644 1547 m->m_data -= ETH_HLEN; 1645 1548 m->m_len += ETH_HLEN; 1646 1549 eh = mtod(m, struct ethhdr *); 1647 #endif1648 1550 1649 1551 if (memcmp(eh->h_source, special_ethaddr, ETH_ALEN) != 0) … … 1659 1561 } 1660 1562 } 1661 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1662 mlen = m->m_len;1663 #else1664 1563 mlen = m_length(m, NULL); 1665 1564 buf = RTMemAlloc(mlen); … … 1670 1569 goto done; 1671 1570 } 1672 #endif1673 1571 eh->h_proto = RT_H2N_U16(eth_proto); 1674 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1675 1572 m_copydata(m, 0, mlen, (char *)buf); 1676 1573 if (flags & ETH_ENCAP_URG) … … 1678 1575 else 1679 1576 slirp_output(pData->pvUser, m, buf, mlen); 1680 #else1681 if (flags & ETH_ENCAP_URG)1682 slirp_urg_output(pData->pvUser, m, mtod(m, const uint8_t *), mlen);1683 else1684 slirp_output(pData->pvUser, m, mtod(m, const uint8_t *), mlen);1685 #endif1686 1577 done: 1687 1578 STAM_PROFILE_STOP(&pData->StatIF_encap, a); … … 2048 1939 struct arphdr *ahdr; 2049 1940 2050 #ifndef VBOX_WITH_SLIRP_BSD_MBUF2051 m = m_get(pData);2052 #else2053 1941 m = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR); 2054 #endif2055 1942 if (m == NULL) 2056 1943 { … … 2070 1957 memset(ahdr->ar_tha, 0xff, ETH_ALEN); /*broadcast*/ 2071 1958 *(uint32_t *)ahdr->ar_tip = dst; 2072 #ifndef VBOX_WITH_SLIRP_BSD_MBUF2073 m->m_data += if_maxlinkhdr;2074 m->m_len = sizeof(struct arphdr);2075 #else2076 1959 /* warn!!! should falls in mbuf minimal size */ 2077 1960 m->m_len = sizeof(struct arphdr) + ETH_HLEN; 2078 1961 m->m_data += ETH_HLEN; 2079 1962 m->m_len -= ETH_HLEN; 2080 #endif2081 1963 if_encap(pData, ETH_P_ARP, m, ETH_ENCAP_URG); 2082 1964 } … … 2122 2004 } 2123 2005 2124 #ifdef VBOX_WITH_SLIRP_BSD_MBUF2125 2006 void slirp_set_mtu(PNATState pData, int mtu) 2126 2007 { … … 2133 2014 if_mru = mtu; 2134 2015 } 2135 #endif -
trunk/src/VBox/Devices/Network/slirp/slirp.h
r29656 r30016 248 248 #include "icmp_var.h" 249 249 #include "mbuf.h" 250 #include "if.h" 250 251 #include "sbuf.h" 251 252 #include "socket.h" 252 #include "if.h"253 253 #include "main.h" 254 254 #include "misc.h" … … 286 286 287 287 /* cksum.c */ 288 #ifndef VBOX_WITH_SLIRP_BSD_MBUF289 int cksum(struct mbuf *m, int len);290 #else291 288 typedef uint16_t u_short; 292 289 typedef unsigned int u_int; 293 290 #include "in_cksum.h" 294 #endif295 291 296 292 /* if.c */ … … 419 415 #endif /*VBOX_SLIRP_ALIAS*/ 420 416 421 #ifdef VBOX_WITH_SLIRP_BSD_MBUF422 417 /** 423 418 * @todo might be useful to make it configurable, especially in terms of Intnet behind NAT … … 446 441 void mbuf_init(void *); 447 442 # define cksum(m, len) in_cksum_skip((m), (len), 0) 448 #endif449 443 450 444 int ftp_alias_load(PNATState); -
trunk/src/VBox/Devices/Network/slirp/slirp_state.h
r29656 r30016 72 72 }; 73 73 TAILQ_HEAD(dns_list_head, dns_entry); 74 #ifdef VBOX_WITH_SLIRP_BSD_MBUF75 74 TAILQ_HEAD(if_queue, mbuf); 76 #endif77 75 78 76 struct port_forward_rule … … 91 89 LIST_HEAD(port_forward_rule_list, port_forward_rule); 92 90 93 #ifndef VBOX_WITH_SLIRP_BSD_MBUF94 struct mbuf_zone95 {96 LIST_ENTRY(mbuf_zone) list;97 uint8_t *mbuf_zone_base_addr;98 };99 LIST_HEAD(mbuf_zone_list, mbuf_zone);100 #endif101 91 102 92 … … 119 109 int if_queued; 120 110 int if_thresh; 121 #ifndef VBOX_WITH_SLIRP_BSD_MBUF122 struct mbuf if_fastq;123 struct mbuf if_batchq;124 #else125 struct if_queue if_fastq;126 struct if_queue if_batchq;127 #endif128 struct mbuf *next_m;129 111 /* Stuff from icmp.c */ 130 112 struct icmpstat_t icmpstat; … … 137 119 uint16_t ip_currid; 138 120 /* Stuff from mbuf.c */ 139 int mbuf_alloced, mbuf_max;140 int msize;141 struct mbuf m_freelist, m_usedlist;142 #ifndef VBOX_WITH_SLIRP_BSD_MBUF143 struct mbuf_zone_list mbuf_zone_head;144 RTCRITSECT cs_mbuf_zone;145 int fmbuf_water_line;146 int mbuf_water_line_limit;147 int mbuf_zone_count;148 int fmbuf_water_warn_sent;149 uint32_t tsmbuf_water_warn_sent;150 #endif151 121 /* Stuff from slirp.c */ 152 122 void *pvUser; … … 242 212 HANDLE phEvents[VBOX_EVENT_COUNT]; 243 213 #endif 244 #ifdef VBOX_WITH_SLIRP_BSD_MBUF 245 # ifdef zone_mbuf 246 # undef zone_mbuf 247 # endif 214 #ifdef zone_mbuf 215 # undef zone_mbuf 216 #endif 248 217 uma_zone_t zone_mbuf; 249 # 250 # 251 # 218 #ifdef zone_clust 219 # undef zone_clust 220 #endif 252 221 uma_zone_t zone_clust; 253 # 254 # 255 # 222 #ifdef zone_pack 223 # undef zone_pack 224 #endif 256 225 uma_zone_t zone_pack; 257 # 258 # 259 # 226 #ifdef zone_jumbop 227 # undef zone_jumbop 228 #endif 260 229 uma_zone_t zone_jumbop; 261 # 262 # 263 # 230 #ifdef zone_jumbo9 231 # undef zone_jumbo9 232 #endif 264 233 uma_zone_t zone_jumbo9; 265 # 266 # 267 # 234 #ifdef zone_jumbo16 235 # undef zone_jumbo16 236 #endif 268 237 uma_zone_t zone_jumbo16; 269 # 270 # 238 #ifdef zone_ext_refcnt 239 # undef zone_ext_refcnt 271 240 int nmbclusters; /* limits number of mbuf clusters */ 272 241 int nmbjumbop; /* limits number of page size jumbo clusters */ … … 274 243 int nmbjumbo16; /* limits number of 16k jumbo clusters */ 275 244 struct mbstat mbstat; 276 # 245 #endif 277 246 uma_zone_t zone_ext_refcnt; 278 #endif279 247 bool fUseHostResolver; 280 248 /* from dnsproxy/dnsproxy.h*/ … … 372 340 #define if_queued pData->if_queued 373 341 #define if_thresh pData->if_thresh 374 #define if_fastq pData->if_fastq375 #define if_batchq pData->if_batchq376 #define next_m pData->next_m377 342 378 343 #define icmpstat pData->icmpstat … … 709 674 #define instancehead pData->instancehead 710 675 711 #ifdef VBOX_WITH_SLIRP_BSD_MBUF 712 # define nmbclusters pData->nmbclusters 713 # define nmbjumbop pData->nmbjumbop 714 # define nmbjumbo9 pData->nmbjumbo9 715 # define nmbjumbo16 pData->nmbjumbo16 716 # define mbstat pData->mbstat 717 # include "ext.h" 718 # undef zone_mbuf 719 # undef zone_clust 720 # undef zone_pack 721 # undef zone_jumbop 722 # undef zone_jumbo9 723 # undef zone_jumbo16 724 # undef zone_ext_refcnt 676 #define nmbclusters pData->nmbclusters 677 #define nmbjumbop pData->nmbjumbop 678 #define nmbjumbo9 pData->nmbjumbo9 679 #define nmbjumbo16 pData->nmbjumbo16 680 #define mbstat pData->mbstat 681 #include "ext.h" 682 #undef zone_mbuf 683 #undef zone_clust 684 #undef zone_pack 685 #undef zone_jumbop 686 #undef zone_jumbo9 687 #undef zone_jumbo16 688 #undef zone_ext_refcnt 725 689 static inline uma_zone_t slirp_zone_pack(PNATState pData) 726 690 { … … 754 718 # define m_adj(m, len) m_adj(pData, (m), (len)) 755 719 #endif 756 #endif757 720 758 721 #endif /* !___slirp_state_h */ -
trunk/src/VBox/Devices/Network/slirp/socket.c
r30013 r30016 588 588 ssize_t len; 589 589 u_long n = 0; 590 #ifdef VBOX_WITH_SLIRP_BSD_MBUF591 590 int size; 592 #endif593 591 int rc = 0; 594 592 static int signalled = 0; … … 598 596 QSOCKET_UNLOCK(udb); 599 597 600 #ifndef VBOX_WITH_SLIRP_BSD_MBUF601 if (!(m = m_get(pData)))602 {603 SOCKET_UNLOCK(so);604 return;605 }606 /* adjust both parameters to maks M_FREEROOM calculate correct */607 m->m_data += if_maxlinkhdr + sizeof(struct udphdr) + sizeof(struct ip);608 609 /*610 * XXX Shouldn't FIONREAD packets destined for port 53,611 * but I don't know the max packet size for DNS lookups612 */613 len = M_FREEROOM(m);614 /* if (so->so_fport != RT_H2N_U16_C(53)) */615 rc = ioctlsocket(so->s, FIONREAD, &n);616 if ( rc == -1617 && ( errno == EAGAIN618 || errno == EWOULDBLOCK619 || errno == EINPROGRESS620 || errno == ENOTCONN))621 {622 m_freem(pData, m);623 return;624 }625 626 Log2(("NAT: %R[natsock] ioctlsocket before read "627 "(rc:%d errno:%d, n:%d)\n", so, rc, errno, n));628 629 if (rc == -1 && signalled == 0)630 {631 LogRel(("NAT: can't fetch amount of bytes on socket %R[natsock], so message will be truncated.\n", so));632 signalled = 1;633 m_freem(pData, m);634 return;635 }636 637 if (rc != -1 && n > len)638 {639 n = (m->m_data - m->m_dat) + m->m_len + n + 1;640 m_inc(m, n);641 len = M_FREEROOM(m);642 }643 ret = recvfrom(so->s, m->m_data, len, 0,644 (struct sockaddr *)&addr, &addrlen);645 Log2(("NAT: %R[natsock] ioctlsocket after read "646 "(rc:%d errno:%d, n:%d) ret:%d, len:%d\n", so,647 rc, errno, n, ret, len));648 #else649 598 /*How many data has been received ?*/ 650 599 /* … … 688 637 (struct sockaddr *)&addr, &addrlen); 689 638 /* @todo (vvl) check which flags and type should be passed */ 690 #endif691 639 m->m_len = ret; 692 640 if (ret < 0) … … 763 711 struct sockaddr_in host_addr; 764 712 #endif 765 #ifdef VBOX_WITH_SLIRP_BSD_MBUF766 713 caddr_t buf; 767 714 int mlen; 768 #endif769 715 770 716 DEBUG_CALL("sosendto"); … … 818 764 819 765 /* Don't care what port we get */ 820 #ifndef VBOX_WITH_SLIRP_BSD_MBUF821 ret = sendto(so->s, m->m_data, m->m_len, 0, &addr, sizeof (struct sockaddr_in));822 #else823 766 mlen = m_length(m, NULL); 824 767 buf = RTMemAlloc(mlen); … … 830 773 ret = sendto(so->s, buf, mlen, 0, 831 774 (struct sockaddr *)&addr, sizeof (struct sockaddr)); 832 #endif833 775 if (ret < 0) 834 776 { … … 1070 1012 uint8_t proto; 1071 1013 int type = 0; 1072 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1073 int m_room;1074 #endif1075 1014 1076 1015 ip = (struct ip *)buff; … … 1182 1121 original_hlen = ip->ip_hl << 2; 1183 1122 /* saves original ip header and options */ 1184 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1185 1123 m_copyback(pData, m, original_hlen, len - hlen, buff + hlen); 1186 1124 ip->ip_len = m_length(m, NULL); 1187 #else1188 /* m_room space in the saved m buffer */1189 m_room = M_ROOM(m);1190 if (m_room < len - hlen + original_hlen)1191 {1192 /* we need involve ether header length into new buffer buffer calculation */1193 m_inc(m, if_maxlinkhdr + len - hlen + original_hlen);1194 if (m->m_size < if_maxlinkhdr + len - hlen + original_hlen)1195 {1196 Log(("send_icmp_to_guest: extending buffer was failed (packet is dropped)\n"));1197 return;1198 }1199 }1200 memcpy(m->m_data + original_hlen, buff + hlen, len - hlen);1201 m->m_len = len - hlen + original_hlen;1202 ip->ip_len = m->m_len;1203 #endif1204 1125 ip->ip_p = IPPROTO_ICMP; /* the original package could be whatever, but we're response via ICMP*/ 1205 1126 … … 1288 1209 break; 1289 1210 case IP_SUCCESS: /* echo replied */ 1290 # ifndef VBOX_WITH_SLIRP_BSD_MBUF1291 m = m_get(pData);1292 # else1293 1211 out_len = ETH_HLEN + sizeof(struct ip) + 8; 1294 1212 size; … … 1308 1226 if (m == NULL) 1309 1227 return; 1310 # endif1311 1228 m->m_len = 0; 1312 1229 m->m_data += if_maxlinkhdr; … … 1327 1244 data_len += ICMP_MINLEN; 1328 1245 1329 # ifndef VBOX_WITH_SLIRP_BSD_MBUF1330 nbytes = (data_len + icr[i].DataSize > m->m_size? m->m_size - data_len: icr[i].DataSize);1331 memcpy(icp->icmp_data, icr[i].Data, nbytes);1332 # else1333 1246 hlen = (ip->ip_hl << 2); 1334 1247 m->m_pkthdr.header = mtod(m, void *); … … 1336 1249 1337 1250 m_copyback(pData, m, hlen + 8, icr[i].DataSize, icr[i].Data); 1338 # endif1339 1251 1340 1252 data_len += icr[i].DataSize; … … 1365 1277 data_len = (ip_broken->ip_hl << 2) + 64; 1366 1278 1367 #ifndef VBOX_WITH_SLIRP_BSD_MBUF1368 nbytes =(hlen + ICMP_MINLEN + data_len > m->m_size? m->m_size - (hlen + ICMP_MINLEN): data_len);1369 memcpy(icp->icmp_data, ip_broken, nbytes);1370 #else1371 1279 m->m_len = data_len; 1372 1280 m->m_pkthdr.header = mtod(m, void *); 1373 1281 m_copyback(pData, m, ip->ip_hl >> 2, icr[i].DataSize, icr[i].Data); 1374 #endif1375 1282 icmp_reflect(pData, m); 1376 1283 break; -
trunk/src/VBox/Devices/Network/slirp/tcp.h
r28800 r30016 135 135 * We make this 1460 because we only care about Ethernet in the qemu context. 136 136 */ 137 #ifndef VBOX_WITH_SLIRP_BSD_MBUF138 #define TCP_MSS 1460139 #else140 137 #define TCP_MSS (if_mtu - 80) 141 #endif142 138 143 139 #define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ -
trunk/src/VBox/Devices/Network/slirp/tcp_input.c
r28800 r30016 359 359 * here we do the test the same as input method of UDP protocol. 360 360 */ 361 #ifdef VBOX_WITH_SLIRP_BSD_MBUF362 361 Assert((ip->ip_len + iphlen == m_length(m, NULL))); 363 #else364 Assert((ip->ip_len + iphlen == m->m_len));365 #endif366 362 save_ip = *ip; 367 363 save_ip.ip_len+= iphlen; -
trunk/src/VBox/Devices/Network/slirp/tcp_output.c
r28800 r30016 100 100 unsigned optlen, hdrlen; 101 101 int idle, sendalot; 102 #ifdef VBOX_WITH_SLIRP_BSD_MBUF103 102 int size; 104 #endif105 103 106 104 DEBUG_CALL("tcp_output"); … … 393 391 } 394 392 395 #ifndef VBOX_WITH_SLIRP_BSD_MBUF396 m = m_get(pData);397 #else398 393 size = MCLBYTES; 399 394 if ((len + hdrlen + ETH_HLEN) < MSIZE) … … 408 403 AssertMsgFailed(("Unsupported size")); 409 404 m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size); 410 #endif411 405 if (m == NULL) 412 406 { … … 416 410 } 417 411 m->m_data += if_maxlinkhdr; 418 #ifdef VBOX_WITH_SLIRP_BSD_MBUF419 412 m->m_pkthdr.header = mtod(m, void *); 420 #endif421 413 m->m_len = hdrlen; 422 414 … … 460 452 tcpstat.tcps_sndwinup++; 461 453 462 #ifndef VBOX_WITH_SLIRP_BSD_MBUF 463 m = m_get(pData); 454 if ((hdrlen + ETH_HLEN) < MSIZE) 455 { 456 size = MCLBYTES; 457 } 458 else if ((hdrlen + ETH_HLEN) < MCLBYTES) 459 { 460 size = MCLBYTES; 461 } 462 else if((hdrlen + ETH_HLEN) < MJUM9BYTES) 463 { 464 size = MJUM9BYTES; 465 } 466 else if ((hdrlen + ETH_HLEN) < MJUM16BYTES) 467 { 468 size = MJUM16BYTES; 469 } 470 else 471 { 472 AssertMsgFailed(("Unsupported size")); 473 } 474 m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size); 464 475 if (m == NULL) 465 476 { … … 468 479 goto out; 469 480 } 470 #else471 if ((hdrlen + ETH_HLEN) < MSIZE)472 {473 size = MCLBYTES;474 }475 else if ((hdrlen + ETH_HLEN) < MCLBYTES)476 {477 size = MCLBYTES;478 }479 else if((hdrlen + ETH_HLEN) < MJUM9BYTES)480 {481 size = MJUM9BYTES;482 }483 else if ((hdrlen + ETH_HLEN) < MJUM16BYTES)484 {485 size = MJUM16BYTES;486 }487 else488 {489 AssertMsgFailed(("Unsupported size"));490 }491 m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size);492 #endif493 if (m == NULL)494 {495 /* error = ENOBUFS; */496 error = 1;497 goto out;498 }499 481 m->m_data += if_maxlinkhdr; 500 #ifdef VBOX_WITH_SLIRP_BSD_MBUF501 482 m->m_pkthdr.header = mtod(m, void *); 502 #endif503 483 m->m_len = hdrlen; 504 484 } … … 648 628 * the template, but need a way to checksum without them. 649 629 */ 650 #ifndef VBOX_WITH_SLIRP_BSD_MBUF651 Assert(m->m_len == (hdrlen + len));652 #else653 630 M_ASSERTPKTHDR(m); 654 631 m->m_pkthdr.header = mtod(m, void *); 655 #endif656 632 m->m_len = hdrlen + len; /* XXX Needed? m_len should be correct */ 657 633 … … 666 642 error = ip_output(m, tp->t_inpcb->inp_options, &tp->t_inpcb->inp_route, 667 643 so->so_options & SO_DONTROUTE, 0); 668 #endif669 #ifndef VBOX_WITH_SLIRP_BSD_MBUF670 if(so->so_la != NULL)671 m->m_la = so->so_la;672 644 #endif 673 645 error = ip_output(pData, so, m); -
trunk/src/VBox/Devices/Network/slirp/tcp_subr.c
r28800 r30016 141 141 if (m == 0) 142 142 { 143 #ifndef VBOX_WITH_SLIRP_BSD_MBUF144 if ((m = m_get(pData)) == NULL)145 #else146 143 if ((m = m_gethdr(pData, M_DONTWAIT, MT_HEADER)) == NULL) 147 #endif148 144 return; 149 145 #ifdef TCP_COMPAT_42 … … 153 149 #endif 154 150 m->m_data += if_maxlinkhdr; 155 #ifdef VBOX_WITH_SLIRP_BSD_MBUF156 151 m->m_pkthdr.header = mtod(m, void *); 157 #endif158 152 *mtod(m, struct tcpiphdr *) = *ti; 159 153 ti = mtod(m, struct tcpiphdr *); -
trunk/src/VBox/Devices/Network/slirp/tftp.c
r29050 r30016 145 145 int n = 0; 146 146 147 #ifndef VBOX_WITH_SLIRP_BSD_MBUF148 m = m_get(pData);149 #else150 147 m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR); 151 #endif152 148 if (!m) 153 149 return -1; 154 150 155 #ifndef VBOX_WITH_SLIRP_BSD_MBUF156 memset(m->m_data, 0, m->m_size);157 m->m_data += if_maxlinkhdr;158 #else159 151 m->m_data += if_maxlinkhdr; 160 152 m->m_pkthdr.header = mtod(m, void *); 161 #endif162 153 tp = (void *)m->m_data; 163 154 m->m_data += sizeof(struct udpiphdr); 164 155 165 156 tp->tp_op = RT_H2N_U16_C(TFTP_OACK); 166 #ifndef VBOX_WITH_SLIRP_BSD_MBUF167 n += RTStrPrintf((char *)tp->x.tp_buf + n, M_FREEROOM(m), "%s", key) + 1;168 n += RTStrPrintf((char *)tp->x.tp_buf + n, M_FREEROOM(m), "%u", value) + 1;169 #else170 157 n += RTStrPrintf((char *)tp->x.tp_buf + n, M_TRAILINGSPACE(m), "%s", key) + 1; 171 158 n += RTStrPrintf((char *)tp->x.tp_buf + n, M_TRAILINGSPACE(m), "%u", value) + 1; 172 #endif173 159 174 160 saddr.sin_addr = recv_tp->ip.ip_dst; … … 195 181 int nobytes; 196 182 197 #ifndef VBOX_WITH_SLIRP_BSD_MBUF198 m = m_get(pData);199 #else200 183 if ((m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR)) == NULL) 201 #endif202 184 if (!m) 203 185 return -1; 204 186 205 #ifndef VBOX_WITH_SLIRP_BSD_MBUF206 memset(m->m_data, 0, m->m_size);207 m->m_data += if_maxlinkhdr;208 #else209 187 m->m_data += if_maxlinkhdr; 210 188 m->m_pkthdr.header = mtod(m, void *); 211 #endif212 189 tp = (void *)m->m_data; 213 190 m->m_data += sizeof(struct udpiphdr); … … 252 229 return -1; 253 230 254 #ifndef VBOX_WITH_SLIRP_BSD_MBUF255 m = m_get(pData);256 #else257 231 if ((m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR)) == NULL) 258 #endif259 232 if (!m) 260 233 return -1; 261 234 262 #ifndef VBOX_WITH_SLIRP_BSD_MBUF263 memset(m->m_data, 0, m->m_size);264 m->m_data += if_maxlinkhdr;265 #else266 235 m->m_data += if_maxlinkhdr; 267 236 m->m_pkthdr.header = mtod(m, void *); 268 #endif269 237 tp = mtod(m, void *); 270 238 m->m_data += sizeof(struct udpiphdr); -
trunk/src/VBox/Devices/Network/slirp/udp.c
r28800 r30016 127 127 len = RT_N2H_U16((u_int16_t)uh->uh_ulen); 128 128 Assert((ip->ip_len == len)); 129 #ifndef VBOX_WITH_SLIRP_BSD_MBUF130 Assert((ip->ip_len + iphlen == m->m_len));131 #else132 129 Assert((ip->ip_len + iphlen == m_length(m, NULL))); 133 #endif134 130 135 131 if (ip->ip_len != len)
Note:
See TracChangeset
for help on using the changeset viewer.