Revision f1d078c3 net.c

b/net.c
30 30
#include "net/dump.h"
31 31
#include "net/slirp.h"
32 32
#include "net/vde.h"
33
#include "net/util.h"
33 34
#include "monitor.h"
34 35
#include "sysemu.h"
35 36
#include "qemu-common.h"
......
69 70
}
70 71
#endif
71 72

  
72
static int parse_macaddr(uint8_t *macaddr, const char *p)
73
{
74
    int i;
75
    char *last_char;
76
    long int offset;
77

  
78
    errno = 0;
79
    offset = strtol(p, &last_char, 0);    
80
    if (0 == errno && '\0' == *last_char &&
81
            offset >= 0 && offset <= 0xFFFFFF) {
82
        macaddr[3] = (offset & 0xFF0000) >> 16;
83
        macaddr[4] = (offset & 0xFF00) >> 8;
84
        macaddr[5] = offset & 0xFF;
85
        return 0;
86
    } else {
87
        for(i = 0; i < 6; i++) {
88
            macaddr[i] = strtol(p, (char **)&p, 16);
89
            if (i == 5) {
90
                if (*p != '\0')
91
                    return -1;
92
            } else {
93
                if (*p != ':' && *p != '-')
94
                    return -1;
95
                p++;
96
            }
97
        }
98
        return 0;    
99
    }
100

  
101
    return -1;
102
}
103

  
104 73
static int get_str_sep(char *buf, int buf_size, const char **pp, int sep)
105 74
{
106 75
    const char *p, *p1;
......
858 827
    nd->macaddr[5] = 0x56 + idx;
859 828

  
860 829
    if (qemu_opt_get(opts, "macaddr") &&
861
        parse_macaddr(nd->macaddr, qemu_opt_get(opts, "macaddr")) < 0) {
830
        net_parse_macaddr(nd->macaddr, qemu_opt_get(opts, "macaddr")) < 0) {
862 831
        qemu_error("invalid syntax for ethernet address\n");
863 832
        return -1;
864 833
    }

Also available in: Unified diff