VirtualBox

Changeset 25826 in vbox for trunk/src/apps/adpctl


Ignore:
Timestamp:
Jan 14, 2010 10:59:36 AM (15 years ago)
Author:
vboxsync
Message:

VBoxNetAdpCtl, Main/NetIf: multiple vboxnet instance fixes for Solaris.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/apps/adpctl/VBoxNetAdpCtl.cpp

    r24854 r25826  
    5656#define VBOXADPCTL_IFCONFIG_PATH "/sbin/ifconfig"
    5757
    58 #ifdef RT_OS_LINUX
    59 #define VBOXADPCTL_DEL_CMD "del"
     58#if defined(RT_OS_LINUX)
     59# define VBOXADPCTL_DEL_CMD "del"
     60# define VBOXADPCTL_ADD_CMD "add"
     61#elif defined(RT_OS_SOLARIS)
     62# define VBOXADPCTL_DEL_CMD "removeif"
     63# define VBOXADPCTL_ADD_CMD "addif"
    6064#else
    61 #define VBOXADPCTL_DEL_CMD "delete"
     65# define VBOXADPCTL_DEL_CMD "delete"
     66# define VBOXADPCTL_ADD_CMD "add"
    6267#endif
    6368
     
    224229{
    225230    char szAdapterName[VBOXNETADP_MAX_NAME_LEN];
    226     char *pszAdapterName;
    227     const char *pszAddress;
     231    char *pszAdapterName = NULL;
     232    const char *pszAddress = NULL;
    228233    const char *pszNetworkMask = NULL;
    229234    const char *pszOption = NULL;
     
    235240    {
    236241        case 5:
     242        {
     243            /* Add a netmask to existing interface */
    237244            if (strcmp("netmask", argv[3]))
    238245            {
     
    246253            pszAddress = argv[2];
    247254            break;
     255        }
     256
    248257        case 4:
     258        {
     259            /* Remove a single address from existing interface */
    249260            if (strcmp("remove", argv[3]))
    250261            {
     
    257268            pszAddress = argv[2];
    258269            break;
     270        }
     271
    259272        case 3:
     273        {
     274            /* Remove an existing interface */
    260275            pszAdapterName = argv[1];
    261276            pszAddress = argv[2];
     
    265280                if (rc)
    266281                    return rc;
     282#ifdef RT_OS_SOLARIS
     283                return 1;
     284#else
    267285                memset(&Req, '\0', sizeof(Req));
    268286                snprintf(Req.szName, sizeof(Req.szName), "%s", szAdapterName);
    269287                return doIOCtl(VBOXNETADP_CTL_REMOVE, &Req);
     288#endif
    270289            }
    271290            break;
     291        }
     292
    272293        case 2:
     294        {
     295            /* Create a new interface */
    273296            if (strcmp("add", argv[1]) == 0)
    274297            {
     298#ifdef RT_OS_SOLARIS
     299                return 1;
     300#else
    275301                memset(&Req, '\0', sizeof(Req));
    276302                rc = doIOCtl(VBOXNETADP_CTL_ADD, &Req);
    277303                if (rc == 0)
    278304                    puts(Req.szName);
     305#endif
    279306                return rc;
    280307            }
    281308            /* Fall through */
     309        }
     310
    282311        default:
    283312            fprintf(stderr, "Invalid number of arguments.\n\n");
     
    300329        else
    301330        {
    302 #ifdef RT_OS_LINUX
     331#if defined(RT_OS_LINUX)
    303332            rc = executeIfconfig(pszAdapterName, "0.0.0.0");
    304333#else
    305             rc = executeIfconfig(pszAdapterName, "delete", pszAddress);
     334            rc = executeIfconfig(pszAdapterName, VBOXADPCTL_DEL_CMD, pszAddress);
     335#endif
     336
     337#ifdef RT_OS_SOLARIS
     338            /* On Solaris we can unplumb the ipv4 interface */
     339            executeIfconfig(pszAdapterName, "inet", "unplumb");
    306340#endif
    307341        }
     
    312346        if (strchr(pszAddress, ':'))
    313347        {
     348#ifdef RT_OS_SOLARIS
     349            /* On Solaris we need to plumb the interface first if it's not already plumbed. */
     350            if (executeIfconfig(pszAdapterName, "inet6") != 0)
     351                executeIfconfig(pszAdapterName, "inet6", "plumb", "up");
     352#endif
    314353            /*
    315354             * Before we set IPv6 address we'd like to remove
     
    320359                rc = EXIT_FAILURE;
    321360            else
    322                 rc = executeIfconfig(pszAdapterName, "inet6", "add", pszAddress, pszOption, pszNetworkMask);
     361                rc = executeIfconfig(pszAdapterName, "inet6", VBOXADPCTL_ADD_CMD, pszAddress, pszOption, pszNetworkMask);
    323362        }
    324363        else
     364        {
     365#ifdef RT_OS_SOLARIS
     366            /* On Solaris we need to plumb the interface first if it's not already plumbed. */
     367            if (executeIfconfig(pszAdapterName, "inet") != 0)
     368                executeIfconfig(pszAdapterName, "plumb", "up");
     369#endif
    325370            rc = executeIfconfig(pszAdapterName, pszAddress, pszOption, pszNetworkMask);
     371        }
    326372    }
    327373    return rc;
Note: See TracChangeset for help on using the changeset viewer.

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