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*2744d920SPeter Maydell #include "qemu/osdep.h" 261422e32dSPaolo Bonzini #include "util.h" 27f1d078c3SMark McLoughlin 28f1d078c3SMark McLoughlin int net_parse_macaddr(uint8_t *macaddr, const char *p) 29f1d078c3SMark McLoughlin { 30f1d078c3SMark McLoughlin int i; 31f1d078c3SMark McLoughlin char *last_char; 32f1d078c3SMark McLoughlin long int offset; 33f1d078c3SMark McLoughlin 34f1d078c3SMark McLoughlin errno = 0; 35f1d078c3SMark McLoughlin offset = strtol(p, &last_char, 0); 36f1d078c3SMark McLoughlin if (errno == 0 && *last_char == '\0' && 37f1d078c3SMark McLoughlin offset >= 0 && offset <= 0xFFFFFF) { 38f1d078c3SMark McLoughlin macaddr[3] = (offset & 0xFF0000) >> 16; 39f1d078c3SMark McLoughlin macaddr[4] = (offset & 0xFF00) >> 8; 40f1d078c3SMark McLoughlin macaddr[5] = offset & 0xFF; 41f1d078c3SMark McLoughlin return 0; 42f1d078c3SMark McLoughlin } 43f1d078c3SMark McLoughlin 44f1d078c3SMark McLoughlin for (i = 0; i < 6; i++) { 45f1d078c3SMark McLoughlin macaddr[i] = strtol(p, (char **)&p, 16); 46f1d078c3SMark McLoughlin if (i == 5) { 47f1d078c3SMark McLoughlin if (*p != '\0') { 48f1d078c3SMark McLoughlin return -1; 49f1d078c3SMark McLoughlin } 50f1d078c3SMark McLoughlin } else { 51f1d078c3SMark McLoughlin if (*p != ':' && *p != '-') { 52f1d078c3SMark McLoughlin return -1; 53f1d078c3SMark McLoughlin } 54f1d078c3SMark McLoughlin p++; 55f1d078c3SMark McLoughlin } 56f1d078c3SMark McLoughlin } 57f1d078c3SMark McLoughlin 58f1d078c3SMark McLoughlin return 0; 59f1d078c3SMark McLoughlin } 60