VirtualBox

Ignore:
Timestamp:
Nov 6, 2020 11:54:23 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
141264
Message:

VBoxManage/dhcpserver: Added 'start' and 'stop' sub-commands since 'restart' it to braindead to restart a DHCP server that quit on its own (restart only works if the server is still running).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageDHCPServer.cpp

    r82968 r86820  
    10271027
    10281028/**
     1029 * Handles the 'start' subcommand.
     1030 */
     1031static DECLCALLBACK(RTEXITCODE) dhcpdHandleStart(PDHCPDCMDCTX pCtx, int argc, char **argv)
     1032{
     1033    /*
     1034     * Parse the command line.
     1035     */
     1036    static const RTGETOPTDEF s_aOptions[] =
     1037    {
     1038        DHCPD_CMD_COMMON_OPTION_DEFS(),
     1039    };
     1040
     1041    RTGETOPTSTATE   GetState;
     1042    int vrc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
     1043    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1044
     1045    RTGETOPTUNION   ValueUnion;
     1046    while ((vrc = RTGetOpt(&GetState, &ValueUnion)))
     1047    {
     1048        switch (vrc)
     1049        {
     1050            DHCPD_CMD_COMMON_OPTION_CASES(pCtx, vrc, &ValueUnion);
     1051            default:
     1052                return errorGetOpt(vrc, &ValueUnion);
     1053        }
     1054    }
     1055
     1056    /*
     1057     * Locate the server.
     1058     */
     1059    ComPtr<IDHCPServer> ptrDHCPServer = dhcpdFindServer(pCtx);
     1060    if (ptrDHCPServer.isNotNull())
     1061    {
     1062        /*
     1063         * We have to figure out the trunk name and type here, which is silly to
     1064         * leave to the API client as it's a pain to get right.  But here we go...
     1065         */
     1066        static char const s_szHostOnlyPrefix[] = "HostInterfaceNetworking-";
     1067        bool fHostOnly = true;
     1068        Bstr strTrunkName;
     1069        if (pCtx->pszInterface)
     1070            strTrunkName = pCtx->pszInterface;
     1071        else if (RTStrStartsWith(pCtx->pszNetwork, s_szHostOnlyPrefix))
     1072            strTrunkName = &pCtx->pszNetwork[sizeof(s_szHostOnlyPrefix) - 1];
     1073        else
     1074            fHostOnly = false;
     1075
     1076        Bstr strTrunkType;
     1077        if (fHostOnly)
     1078#if defined(RT_OS_WINDOWS) || defined(RT_OS_DARWIN)
     1079            strTrunkType = "netadp";
     1080#else /* lazy implementations: */
     1081            strTrunkType = "netflt";
     1082#endif
     1083        else
     1084            strTrunkType = "whatever";
     1085
     1086        HRESULT hrc = ptrDHCPServer->Start(strTrunkName.raw(), strTrunkType.raw());
     1087        if (SUCCEEDED(hrc))
     1088            return RTEXITCODE_SUCCESS;
     1089        errorArgument("Failed to start the server");
     1090        GlueHandleComErrorNoCtx(ptrDHCPServer, hrc);
     1091    }
     1092    return RTEXITCODE_FAILURE;
     1093}
     1094
     1095
     1096/**
    10291097 * Handles the 'restart' subcommand.
    10301098 */
     
    10601128    if (ptrDHCPServer.isNotNull())
    10611129    {
    1062         HRESULT hrc;
    1063         CHECK_ERROR2(hrc, ptrDHCPServer, Restart());
     1130        HRESULT hrc = ptrDHCPServer->Restart();
    10641131        if (SUCCEEDED(hrc))
    10651132            return RTEXITCODE_SUCCESS;
    1066         errorArgument("Failed to restart server");
     1133        errorArgument("Failed to restart the server");
     1134        GlueHandleComErrorNoCtx(ptrDHCPServer, hrc);
     1135    }
     1136    return RTEXITCODE_FAILURE;
     1137}
     1138
     1139
     1140/**
     1141 * Handles the 'stop' subcommand.
     1142 */
     1143static DECLCALLBACK(RTEXITCODE) dhcpdHandleStop(PDHCPDCMDCTX pCtx, int argc, char **argv)
     1144{
     1145    /*
     1146     * Parse the command line.
     1147     */
     1148    static const RTGETOPTDEF s_aOptions[] =
     1149    {
     1150        DHCPD_CMD_COMMON_OPTION_DEFS(),
     1151    };
     1152
     1153    RTGETOPTSTATE   GetState;
     1154    int vrc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
     1155    AssertRCReturn(vrc, RTEXITCODE_FAILURE);
     1156
     1157    RTGETOPTUNION   ValueUnion;
     1158    while ((vrc = RTGetOpt(&GetState, &ValueUnion)))
     1159    {
     1160        switch (vrc)
     1161        {
     1162            DHCPD_CMD_COMMON_OPTION_CASES(pCtx, vrc, &ValueUnion);
     1163            default:
     1164                return errorGetOpt(vrc, &ValueUnion);
     1165        }
     1166    }
     1167
     1168    /*
     1169     * Locate the server and perform the requested operation.
     1170     */
     1171    ComPtr<IDHCPServer> ptrDHCPServer = dhcpdFindServer(pCtx);
     1172    if (ptrDHCPServer.isNotNull())
     1173    {
     1174        HRESULT hrc = ptrDHCPServer->Stop();
     1175        if (SUCCEEDED(hrc))
     1176            return RTEXITCODE_SUCCESS;
     1177        errorArgument("Failed to stop the server");
     1178        GlueHandleComErrorNoCtx(ptrDHCPServer, hrc);
    10671179    }
    10681180    return RTEXITCODE_FAILURE;
     
    11691281        { "modify",         dhcpdHandleAddAndModify,    HELP_SCOPE_DHCPSERVER_MODIFY },
    11701282        { "remove",         dhcpdHandleRemove,          HELP_SCOPE_DHCPSERVER_REMOVE },
     1283        { "start",          dhcpdHandleStart,           HELP_SCOPE_DHCPSERVER_START },
    11711284        { "restart",        dhcpdHandleRestart,         HELP_SCOPE_DHCPSERVER_RESTART },
     1285        { "stop",           dhcpdHandleStop,            HELP_SCOPE_DHCPSERVER_STOP },
    11721286        { "findlease",      dhcpdHandleFindLease,       HELP_SCOPE_DHCPSERVER_FINDLEASE },
    11731287    };
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette