util.c 1.9 KB

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