Changeset 28703 in vbox for trunk/src/VBox/HostDrivers/VBoxNetFlt
- Timestamp:
- Apr 25, 2010 12:37:30 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 60575
- Location:
- trunk/src/VBox/HostDrivers/VBoxNetFlt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
r28667 r28703 170 170 struct notifier_block Notifier; 171 171 struct packet_type PacketType; 172 # ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 172 173 struct sk_buff_head XmitQueue; 173 174 struct work_struct XmitTask; 175 # endif 174 176 /** @} */ 175 177 # elif defined(RT_OS_SOLARIS) -
trunk/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
r28666 r28703 23 23 * Header Files * 24 24 *******************************************************************************/ 25 #define LOG_GROUP LOG_GROUP_NET_FLT_DRV 26 #define VBOXNETFLT_LINUX_NO_XMIT_QUEUE 25 27 #include "the-linux-kernel.h" 26 28 #include "version-generated.h" … … 32 34 #include <linux/ip.h> 33 35 34 #define LOG_GROUP LOG_GROUP_NET_FLT_DRV35 36 #include <VBox/log.h> 36 37 #include <VBox/err.h> … … 58 59 * Defined Constants And Macros * 59 60 *******************************************************************************/ 60 #define VBOX_FLT_NB_TO_INST(pNB) ((PVBOXNETFLTINS)((uint8_t *)pNB - RT_OFFSETOF(VBOXNETFLTINS, u.s.Notifier))) 61 #define VBOX_FLT_PT_TO_INST(pPT) ((PVBOXNETFLTINS)((uint8_t *)pPT - RT_OFFSETOF(VBOXNETFLTINS, u.s.PacketType))) 62 #define VBOX_FLT_XT_TO_INST(pXT) ((PVBOXNETFLTINS)((uint8_t *)pXT - RT_OFFSETOF(VBOXNETFLTINS, u.s.XmitTask))) 61 #define VBOX_FLT_NB_TO_INST(pNB) RT_FROM_MEMBER(pNB, VBOXNETFLTINS, u.s.Notifier) 62 #define VBOX_FLT_PT_TO_INST(pPT) RT_FROM_MEMBER(pPT, VBOXNETFLTINS, u.s.PacketType) 63 #ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 64 # define VBOX_FLT_XT_TO_INST(pXT) RT_FROM_MEMBER(pXT, VBOXNETFLTINS, u.s.XmitTask) 65 #endif 63 66 64 67 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) … … 121 124 static int VBoxNetFltLinuxInit(void); 122 125 static void VBoxNetFltLinuxUnload(void); 126 static void vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf); 123 127 124 128 … … 760 764 #endif 761 765 766 #ifdef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 767 /* Forward it to the internal network. */ 768 vboxNetFltLinuxForwardToIntNet(pThis, pBuf); 769 #else 762 770 /* Add the packet to transmit queue and schedule the bottom half. */ 763 771 skb_queue_tail(&pThis->u.s.XmitQueue, pBuf); … … 765 773 Log4(("vboxNetFltLinuxPacketHandler: scheduled work %p for sk_buff %p\n", 766 774 &pThis->u.s.XmitTask, pBuf)); 775 #endif 767 776 768 777 /* It does not really matter what we return, it is ignored by the kernel. */ … … 1124 1133 } 1125 1134 1135 /** 1136 * 1137 * @param pBuf The socket buffer. This is consumed by this function. 1138 */ 1126 1139 static void vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf) 1127 1140 { … … 1193 1206 } 1194 1207 1208 #ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 1195 1209 /** 1196 1210 * Work queue handler that forwards the socket buffers queued by … … 1199 1213 * @param pWork The work queue. 1200 1214 */ 1201 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)1215 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) 1202 1216 static void vboxNetFltLinuxXmitTask(struct work_struct *pWork) 1203 # else1217 # else 1204 1218 static void vboxNetFltLinuxXmitTask(void *pWork) 1205 # endif1219 # endif 1206 1220 { 1207 1221 PVBOXNETFLTINS pThis = VBOX_FLT_XT_TO_INST(pWork); … … 1235 1249 } 1236 1250 } 1251 #endif /* !VBOXNETFLT_LINUX_NO_XMIT_QUEUE */ 1237 1252 1238 1253 /** … … 1398 1413 1399 1414 dev_remove_pack(&pThis->u.s.PacketType); 1415 #ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 1400 1416 skb_queue_purge(&pThis->u.s.XmitQueue); 1417 #endif 1401 1418 Log(("vboxNetFltLinuxUnregisterDevice: this=%p: Packet handler removed, xmit queue purged.\n", pThis)); 1402 1419 Log(("vboxNetFltLinuxUnregisterDevice: Device %p(%s) released. ref=%d\n", pDev, pDev->name, atomic_read(&pDev->refcnt))); … … 1687 1704 { 1688 1705 dev_remove_pack(&pThis->u.s.PacketType); 1706 #ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 1689 1707 skb_queue_purge(&pThis->u.s.XmitQueue); 1708 #endif 1690 1709 Log(("vboxNetFltOsDeleteInstance: this=%p: Packet handler removed, xmit queue purged.\n", pThis)); 1691 1710 Log(("vboxNetFltOsDeleteInstance: Device %p(%s) released. ref=%d\n", pDev, pDev->name, atomic_read(&pDev->refcnt))); … … 1731 1750 pThis->u.s.fPromiscuousSet = false; 1732 1751 memset(&pThis->u.s.PacketType, 0, sizeof(pThis->u.s.PacketType)); 1752 #ifndef VBOXNETFLT_LINUX_NO_XMIT_QUEUE 1733 1753 skb_queue_head_init(&pThis->u.s.XmitQueue); 1734 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)1754 # if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20) 1735 1755 INIT_WORK(&pThis->u.s.XmitTask, vboxNetFltLinuxXmitTask); 1736 # else1756 # else 1737 1757 INIT_WORK(&pThis->u.s.XmitTask, vboxNetFltLinuxXmitTask, &pThis->u.s.XmitTask); 1758 # endif 1738 1759 #endif 1739 1760
Note:
See TracChangeset
for help on using the changeset viewer.