1f1d078c3SMark McLoughlin /* 2f1d078c3SMark McLoughlin * QEMU System Emulator 3f1d078c3SMark McLoughlin * 4f1d078c3SMark McLoughlin * Copyright (c) 2003-2008 Fabrice Bellard 5f1d078c3SMark McLoughlin * 6f1d078c3SMark McLoughlin * Permission is hereby granted, free of charge, to any person obtaining a copy 7f1d078c3SMark McLoughlin * of this software and associated documentation files (the "Software"), to deal 8f1d078c3SMark McLoughlin * in the Software without restriction, including without limitation the rights 9f1d078c3SMark McLoughlin * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10f1d078c3SMark McLoughlin * copies of the Software, and to permit persons to whom the Software is 11f1d078c3SMark McLoughlin * furnished to do so, subject to the following conditions: 12f1d078c3SMark McLoughlin * 13f1d078c3SMark McLoughlin * The above copyright notice and this permission notice shall be included in 14f1d078c3SMark McLoughlin * all copies or substantial portions of the Software. 15f1d078c3SMark McLoughlin * 16f1d078c3SMark McLoughlin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17f1d078c3SMark McLoughlin * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18f1d078c3SMark McLoughlin * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19f1d078c3SMark McLoughlin * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20f1d078c3SMark McLoughlin * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21f1d078c3SMark McLoughlin * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22f1d078c3SMark McLoughlin * THE SOFTWARE. 23f1d078c3SMark McLoughlin */ 24f1d078c3SMark McLoughlin 25*1422e32dSPaolo Bonzini #include "util.h" 26f1d078c3SMark McLoughlin #include <errno.h> 27f1d078c3SMark McLoughlin #include <stdlib.h> 28f1d078c3SMark McLoughlin 29f1d078c3SMark McLoughlin int net_parse_macaddr(uint8_t *macaddr, const char *p) 30f1d078c3SMark McLoughlin { 31f1d078c3SMark McLoughlin int i; 32f1d078c3SMark McLoughlin char *last_char; 33f1d078c3SMark McLoughlin long int offset; 34f1d078c3SMark McLoughlin 35f1d078c3SMark McLoughlin errno = 0; 36f1d078c3SMark McLoughlin offset = strtol(p, &last_char, 0); 37f1d078c3SMark McLoughlin if (errno == 0 && *last_char == '\0' && 38f1d078c3SMark McLoughlin offset >= 0 && offset <= 0xFFFFFF) { 39f1d078c3SMark McLoughlin macaddr[3] = (offset & 0xFF0000) >> 16; 40f1d078c3SMark McLoughlin macaddr[4] = (offset & 0xFF00) >> 8; 41f1d078c3SMark McLoughlin macaddr[5] = offset & 0xFF; 42f1d078c3SMark McLoughlin return 0; 43f1d078c3SMark McLoughlin } 44f1d078c3SMark McLoughlin 45f1d078c3SMark McLoughlin for (i = 0; i < 6; i++) { 46f1d078c3SMark McLoughlin macaddr[i] = strtol(p, (char **)&p, 16); 47f1d078c3SMark McLoughlin if (i == 5) { 48f1d078c3SMark McLoughlin if (*p != '\0') { 49f1d078c3SMark McLoughlin return -1; 50f1d078c3SMark McLoughlin } 51f1d078c3SMark McLoughlin } else { 52f1d078c3SMark McLoughlin if (*p != ':' && *p != '-') { 53f1d078c3SMark McLoughlin return -1; 54f1d078c3SMark McLoughlin } 55f1d078c3SMark McLoughlin p++; 56f1d078c3SMark McLoughlin } 57f1d078c3SMark McLoughlin } 58f1d078c3SMark McLoughlin 59f1d078c3SMark McLoughlin return 0; 60f1d078c3SMark McLoughlin } 61