- Timestamp:
- Apr 29, 2011 6:03:48 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 71480
- Location:
- trunk/src/VBox/Devices/Network/slirp
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/slirp/bsd/sys/mbuf.h
r28181 r36901 1043 1043 #define PACKET_TAG_CARP 28 /* CARP info */ 1044 1044 #ifdef VBOX 1045 #define PACKET_TAG_ALIAS 0xab01 1046 #define PACKET_TAG_ETHER 0xab02 1045 # define PACKET_TAG_ALIAS 0xab01 1046 # define PACKET_TAG_ETHER 0xab02 1047 # define PACKET_SERVICE 0xab03 1047 1048 #endif 1048 1049 -
trunk/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c
r34103 r36901 133 133 return; 134 134 } 135 m = m_getcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR);135 m = slirpDnsMbufAlloc(pData); 136 136 if (m == NULL) 137 137 { -
trunk/src/VBox/Devices/Network/slirp/slirp.c
r36410 r36901 1435 1435 case CTL_DNS: 1436 1436 case CTL_ALIAS: 1437 case CTL_TFTP: 1438 if (!slirpMbufTagService(pData, mr, (uint8_t)(htip & ~pData->netmask))) 1439 { 1440 static bool fTagErrorReported; 1441 if (!fTagErrorReported) 1442 { 1443 LogRel(("NAT: couldn't add the tag(PACKET_SERVICE:%d) to mbuf:%p\n", 1444 (uint8_t)(htip & ~pData->netmask), m)); 1445 fTagErrorReported = true; 1446 } 1447 } 1437 1448 rah->ar_sha[5] = (uint8_t)(htip & ~pData->netmask); 1438 1449 break; … … 1559 1570 if (memcmp(eh->h_source, special_ethaddr, ETH_ALEN) != 0) 1560 1571 { 1572 struct m_tag *t = m_tag_first(m); 1573 uint8_t u8ServiceId = CTL_ALIAS; 1561 1574 memcpy(eh->h_dest, eh->h_source, ETH_ALEN); 1562 1575 memcpy(eh->h_source, special_ethaddr, ETH_ALEN); … … 1568 1581 goto done; 1569 1582 } 1583 if ( t 1584 && (t = m_tag_find(m, PACKET_SERVICE, NULL))) 1585 { 1586 Assert(t); 1587 u8ServiceId = *(uint8_t *)&t[1]; 1588 } 1589 eh->h_source[5] = u8ServiceId; 1570 1590 } 1571 1591 /* -
trunk/src/VBox/Devices/Network/slirp/slirp.h
r36353 r36901 473 473 return 0; 474 474 } 475 #endif 476 475 476 static inline bool slirpMbufTagService(PNATState pData, struct mbuf *m, uint8_t u8ServiceId) 477 { 478 struct m_tag * t = NULL; 479 /* if_encap assumes that all packets goes through aliased address(gw) */ 480 if (u8ServiceId == CTL_ALIAS) 481 return true; 482 t = m_tag_get(PACKET_SERVICE, sizeof(uint8_t), 0); 483 if (!t) 484 return false; 485 *(uint8_t *)&t[1] = u8ServiceId; 486 m_tag_prepend(m, t); 487 return true; 488 } 489 490 /** 491 * This function tags mbuf allocated for special services. 492 * @todo: add service id verification. 493 */ 494 static inline struct mbuf *slirpServiceMbufAlloc(PNATState pData, uint8_t u8ServiceId) 495 { 496 struct mbuf *m = NULL; 497 m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR); 498 if (!m) 499 return m; 500 if(!slirpMbufTagService(pData, m, u8ServiceId)) 501 { 502 m_freem(pData, m); 503 return NULL; 504 } 505 return m; 506 } 507 508 static inline struct mbuf *slirpTftpMbufAlloc(PNATState pData) 509 { 510 return slirpServiceMbufAlloc(pData, CTL_TFTP); 511 } 512 static inline struct mbuf *slirpDnsMbufAlloc(PNATState pData) 513 { 514 return slirpServiceMbufAlloc(pData, CTL_DNS); 515 } 516 #endif 517 -
trunk/src/VBox/Devices/Network/slirp/tftp.c
r30363 r36901 145 145 int n = 0; 146 146 147 m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR);147 m = slirpTftpMbufAlloc(pData); 148 148 if (!m) 149 149 return -1; … … 181 181 int nobytes; 182 182 183 m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR);183 m = slirpTftpMbufAlloc(pData); 184 184 if (!m) 185 185 return -1; … … 229 229 return -1; 230 230 231 m = m_getcl(pData, M_DONTWAIT, MT_HEADER, M_PKTHDR);231 m = slirpTftpMbufAlloc(pData); 232 232 if (!m) 233 233 return -1; -
trunk/src/VBox/Devices/Network/slirp/udp.c
r35924 r36901 189 189 dst.sin_port = uh->uh_sport; 190 190 191 slirpMbufTagService(pData, m, CTL_DNS); 191 192 /* udp_output2() expects a pointer to the body of UDP packet. */ 192 193 m->m_data += sizeof(struct udpiphdr);
Note:
See TracChangeset
for help on using the changeset viewer.