Changeset 5332 in vbox
- Timestamp:
- Oct 16, 2007 5:00:04 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 25365
- Location:
- trunk/src/VBox
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r5271 r5332 52 52 /** NAT state for this instance. */ 53 53 PNATState pNATState; 54 /** TFTP directory prefix. */ 55 char *pszTFTPPrefix; 56 /** Boot file name to provide in the DHCP server response. */ 57 char *pszBootFile; 54 58 /** Flag whether a NAT ping warning has been shown. */ 55 59 bool fSuppressPingWarning; … … 409 413 * Validate the config. 410 414 */ 411 if (!CFGMR3AreValuesValid(pCfgHandle, "PassDomain\0")) 412 return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES, "Unknown NAT configuration option, only supports PassDomain"); 415 if (!CFGMR3AreValuesValid(pCfgHandle, "PassDomain\0TFTPPrefix\0BootFile\0")) 416 return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES, N_("Unknown NAT configuration option, only supports PassDomain, TFTPPrefix and BootFile")); 417 418 /* 419 * Init the static parts. 420 */ 421 pData->pDrvIns = pDrvIns; 422 pData->pNATState = NULL; 423 pData->pszTFTPPrefix = NULL; 424 pData->pszBootFile = NULL; 425 /* IBase */ 426 pDrvIns->IBase.pfnQueryInterface = drvNATQueryInterface; 427 /* INetwork */ 428 pData->INetworkConnector.pfnSend = drvNATSend; 429 pData->INetworkConnector.pfnSetPromiscuousMode = drvNATSetPromiscuousMode; 430 pData->INetworkConnector.pfnNotifyLinkChanged = drvNATNotifyLinkChanged; 431 pData->INetworkConnector.pfnNotifyCanReceive = drvNATNotifyCanReceive; 413 432 414 433 /* … … 420 439 fPassDomain = true; 421 440 else if (VBOX_FAILURE(rc)) 422 return PDMDrvHlpVMSetError(pData->pDrvIns, rc, RT_SRC_POS, N_("NAT#%d: configuration query for \"PassDomain\" boolean returned %Vrc"), pDrvIns->iInstance, rc); 423 424 /* 425 * Init the static parts. 426 */ 427 pData->pDrvIns = pDrvIns; 428 pData->pNATState = NULL; 429 /* IBase */ 430 pDrvIns->IBase.pfnQueryInterface = drvNATQueryInterface; 431 /* INetwork */ 432 pData->INetworkConnector.pfnSend = drvNATSend; 433 pData->INetworkConnector.pfnSetPromiscuousMode = drvNATSetPromiscuousMode; 434 pData->INetworkConnector.pfnNotifyLinkChanged = drvNATNotifyLinkChanged; 435 pData->INetworkConnector.pfnNotifyCanReceive = drvNATNotifyCanReceive; 441 return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS, N_("NAT#%d: configuration query for \"PassDomain\" boolean returned %Vrc"), pDrvIns->iInstance, rc); 442 443 rc = CFGMR3QueryStringAlloc(pCfgHandle, "TFTPPrefix", &pData->pszTFTPPrefix); 444 if (VBOX_FAILURE(rc) && rc != VERR_CFGM_VALUE_NOT_FOUND) 445 return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS, N_("NAT#%d: configuration query for \"TFTPPrefix\" string returned %Vrc"), pDrvIns->iInstance, rc); 446 rc = CFGMR3QueryStringAlloc(pCfgHandle, "BootFile", &pData->pszBootFile); 447 if (VBOX_FAILURE(rc) && rc != VERR_CFGM_VALUE_NOT_FOUND) 448 return PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS, N_("NAT#%d: configuration query for \"BootFile\" string returned %Vrc"), pDrvIns->iInstance, rc); 436 449 437 450 /* … … 467 480 * Initialize slirp. 468 481 */ 469 rc = slirp_init(&pData->pNATState, &szNetAddr[0], fPassDomain, pData );482 rc = slirp_init(&pData->pNATState, &szNetAddr[0], fPassDomain, pData->pszTFTPPrefix, pData->pszBootFile, pData); 470 483 if (VBOX_SUCCESS(rc)) 471 484 { -
trunk/src/VBox/Devices/Network/slirp/bootp.c
r2938 r5332 187 187 } 188 188 189 if ( bootp_filename)189 if (tftp_prefix && RTDirExists(tftp_prefix) && bootp_filename) 190 190 RTStrPrintf((char*)rbp->bp_file, sizeof(rbp->bp_file), "%s", bootp_filename); 191 191 -
trunk/src/VBox/Devices/Network/slirp/libslirp.h
r5266 r5332 27 27 #endif 28 28 29 int slirp_init(PNATState *, const char *, bool, void *);29 int slirp_init(PNATState *, const char *, bool, const char *, const char *, void *); 30 30 void slirp_term(PNATState); 31 31 void slirp_link_up(PNATState); -
trunk/src/VBox/Devices/Network/slirp/slirp.c
r3693 r5332 169 169 #endif 170 170 171 int slirp_init(PNATState *ppData, const char *pszNetAddr, bool fPassDomain, void *pvUser) 171 int slirp_init(PNATState *ppData, const char *pszNetAddr, bool fPassDomain, 172 const char *pszTFTPPrefix, const char *pszBootFile, 173 void *pvUser) 172 174 { 173 175 int fNATfailed = 0; … … 182 184 pData->cpvHashUsed = 1; 183 185 #endif 186 tftp_prefix = pszTFTPPrefix; 187 bootp_filename = pszBootFile; 184 188 185 189 #ifdef _WIN32 -
trunk/src/VBox/Devices/Network/slirp/slirp.h
r3693 r5332 32 32 #include <iprt/assert.h> 33 33 #include <iprt/string.h> 34 #include <iprt/dir.h> 34 35 #include <VBox/types.h> 35 36 -
trunk/src/VBox/Main/ConsoleImpl2.cpp
r5171 r5332 928 928 rc = CFGMR3InsertNode(pLunL0, "Config", &pCfg); RC_CHECK(); 929 929 /* (Port forwarding goes here.) */ 930 931 /* Configure TFTP prefix and boot filename. */ 932 hrc = virtualBox->COMGETTER(HomeFolder)(&str); H(); 933 STR_CONV(); 934 if (psz && *psz) 935 { 936 char *pszTFTPPrefix = NULL; 937 RTStrAPrintf(&pszTFTPPrefix, "%s%c%s", psz, RTPATH_DELIMITER, "TFTP"); 938 rc = CFGMR3InsertString(pCfg, "TFTPPrefix", pszTFTPPrefix); RC_CHECK(); 939 RTStrFree(pszTFTPPrefix); 940 } 941 STR_FREE(); 942 hrc = pMachine->COMGETTER(Name)(&str); H(); 943 STR_CONV(); 944 char *pszBootFile = NULL; 945 RTStrAPrintf(&pszBootFile, "%s.pxe", psz); 946 STR_FREE(); 947 rc = CFGMR3InsertString(pCfg, "BootFile", pszBootFile); RC_CHECK(); 948 RTStrFree(pszBootFile); 930 949 break; 931 950 } … … 965 984 if (!tapSetupApp.isEmpty()) 966 985 rc = CFGMR3InsertString(pCfg, "TAPSetupApplication", Utf8Str(tapSetupApp)); RC_CHECK(); 967 986 968 987 /* TAP terminate application/script */ 969 988 Bstr tapTerminateApp; … … 971 990 if (!tapTerminateApp.isEmpty()) 972 991 rc = CFGMR3InsertString(pCfg, "TAPTerminateApplication", Utf8Str(tapTerminateApp)); RC_CHECK(); 973 992 974 993 /* "FileHandle" must NOT be inserted here, it is done in DrvTAP.cpp */ 975 994
Note:
See TracChangeset
for help on using the changeset viewer.