- Timestamp:
- Oct 26, 2009 3:29:57 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 53926
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/slirp/slirp.c
r23973 r24062 1525 1525 } 1526 1526 1527 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1528 void slirp_input(PNATState pData, const uint8_t *pkt, int pkt_len)1529 #else1530 1527 void slirp_input(PNATState pData, void *pvArg) 1531 #endif1532 1528 { 1533 1529 struct mbuf *m; 1534 1530 int proto; 1535 1531 static bool fWarnedIpv6; 1536 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1537 struct ethhdr *eh = (struct ethhdr*)pkt;1538 int size = 0;1539 #else1540 1532 struct ethhdr *eh; 1541 #endif 1542 1543 #ifndef VBOX_WITH_SLIRP_BSD_MBUF 1533 1544 1534 m = (struct mbuf *)pvArg; 1545 1535 if (m->m_len < ETH_HLEN) … … 1551 1541 eh = mtod(m, struct ethhdr *); 1552 1542 proto = ntohs(eh->h_proto); 1553 #else1554 Log2(("NAT: slirp_input %d\n", pkt_len));1555 if (pkt_len < ETH_HLEN)1556 {1557 LogRel(("NAT: packet having size %d has been ingnored\n", pkt_len));1558 return;1559 }1560 Log4(("NAT: in:%R[ether]->%R[ether]\n", &eh->h_source, &eh->h_dest));1561 1562 if (memcmp(eh->h_source, special_ethaddr, ETH_ALEN) == 0)1563 {1564 /* @todo vasily: add ether logging routine in debug.c */1565 Log(("NAT: packet was addressed to other MAC\n"));1566 RTMemFree((void *)pkt);1567 return;1568 }1569 1570 if (pkt_len < MSIZE)1571 {1572 size = MCLBYTES;1573 }1574 else if (pkt_len < MCLBYTES)1575 {1576 size = MCLBYTES;1577 }1578 else if(pkt_len < MJUM9BYTES)1579 {1580 size = MJUM9BYTES;1581 }1582 else if (pkt_len < MJUM16BYTES)1583 {1584 size = MJUM16BYTES;1585 }1586 else1587 {1588 AssertMsgFailed(("Unsupported size"));1589 }1590 m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size);1591 if (!m)1592 {1593 LogRel(("NAT: can't allocate new mbuf\n"));1594 RTMemFree((void *)pkt);1595 return;1596 }1597 1598 m->m_len = pkt_len ;1599 memcpy(m->m_data, pkt, pkt_len);1600 proto = ntohs(*(uint16_t *)(pkt + 12));1601 #endif1602 1543 /* Note: we add to align the IP header */ 1603 1544 … … 1620 1561 m->m_pkthdr.header = mtod(m, void *); 1621 1562 #endif 1622 #if 11623 1563 if ( pData->fmbuf_water_line 1624 1564 && pData->fmbuf_water_warn_sent == 0 … … 1629 1569 pData->tsmbuf_water_warn_sent = curtime; 1630 1570 } 1631 #endif1632 1571 ip_input(pData, m); 1633 1572 break; … … 1645 1584 break; 1646 1585 } 1647 #ifdef VBOX_WITH_SLIRP_BSD_MBUF1648 RTMemFree((void *)pkt);1649 #endif1650 1586 } 1651 1587 … … 2107 2043 #endif 2108 2044 if_encap(pData, ETH_P_ARP, m, ETH_ENCAP_URG); 2109 Log(("NAT: ARP request sent\n"));2110 2045 } 2111 2046
Note:
See TracChangeset
for help on using the changeset viewer.