Exemplo n.º 1
0
int config_parse_tunnel_address(const char *unit,
                                const char *filename,
                                unsigned line,
                                const char *section,
                                unsigned section_line,
                                const char *lvalue,
                                int ltype,
                                const char *rvalue,
                                void *data,
                                void *userdata) {
        NetDev *n = userdata;
        union in_addr_union *addr = data;
        int r;

        assert(filename);
        assert(lvalue);
        assert(rvalue);
        assert(data);

        r = net_parse_inaddr(rvalue, &n->family, addr);
        if (r < 0) {
                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                           "Tunnel address is invalid, ignoring assignment: %s", rvalue);
                return 0;
        }

        return 0;
}
Exemplo n.º 2
0
int config_parse_broadcast(const char *unit,
                const char *filename,
                unsigned line,
                const char *section,
                unsigned section_line,
                const char *lvalue,
                int ltype,
                const char *rvalue,
                void *data,
                void *userdata) {
        Network *network = userdata;
        _cleanup_address_free_ Address *n = NULL;
        _cleanup_free_ char *address = NULL;
        int r;

        assert(filename);
        assert(section);
        assert(lvalue);
        assert(rvalue);
        assert(data);

        r = address_new_static(network, section_line, &n);
        if (r < 0)
                return r;

        if (n->family == AF_INET6) {
                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                           "Broadcast is not valid for IPv6 addresses, "
                           "ignoring assignment: %s", address);
                return 0;
        }

        r = net_parse_inaddr(address, &n->family, &n->broadcast);
        if (r < 0) {
                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                           "Broadcast is invalid, ignoring assignment: %s", address);
                return 0;
        }

        n = NULL;

        return 0;
}
Exemplo n.º 3
0
int config_parse_gateway(const char *unit,
                const char *filename,
                unsigned line,
                const char *section,
                unsigned section_line,
                const char *lvalue,
                int ltype,
                const char *rvalue,
                void *data,
                void *userdata) {
        Network *network = userdata;
        _cleanup_route_free_ Route *n = NULL;
        _cleanup_free_ char *route = NULL;
        int r;

        assert(filename);
        assert(section);
        assert(lvalue);
        assert(rvalue);
        assert(data);

        if (streq(section, "Network")) {
                /* we are not in an Route section, so treat
                 * this as the special '0' section */
                section_line = 0;
        }

        r = route_new_static(network, section_line, &n);
        if (r < 0)
                return r;

        r = net_parse_inaddr(rvalue, &n->family, &n->in_addr);
        if (r < 0) {
                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                           "Route is invalid, ignoring assignment: %s", route);
                return 0;
        }

        n = NULL;

        return 0;
}
Exemplo n.º 4
0
int config_parse_dns(const char *unit,
                     const char *filename,
                     unsigned line,
                     const char *section,
                     unsigned section_line,
                     const char *lvalue,
                     int ltype,
                     const char *rvalue,
                     void *data,
                     void *userdata) {
    Address **dns = data;
    _cleanup_address_free_ Address *n = NULL;
    int r;

    assert(filename);
    assert(section);
    assert(lvalue);
    assert(rvalue);
    assert(data);

    r = address_new_dynamic(&n);
    if (r < 0)
        return r;

    r = net_parse_inaddr(rvalue, &n->family, &n->in_addr);
    if (r < 0) {
        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                   "DNS address is invalid, ignoring assignment: %s", rvalue);
        return 0;
    }

    *dns = n;
    n = NULL;

    return 0;
}
Exemplo n.º 5
0
int config_parse_address(const char *unit,
                         const char *filename,
                         unsigned line,
                         const char *section,
                         unsigned section_line,
                         const char *lvalue,
                         int ltype,
                         const char *rvalue,
                         void *data,
                         void *userdata) {
    Network *network = userdata;
    _cleanup_address_free_ Address *n = NULL;
    _cleanup_free_ char *address = NULL;
    const char *e;
    int r;

    assert(filename);
    assert(section);
    assert(lvalue);
    assert(rvalue);
    assert(data);

    if (streq(section, "Network")) {
        /* we are not in an Address section, so treat
         * this as the special '0' section */
        section_line = 0;
    }

    r = address_new_static(network, section_line, &n);
    if (r < 0)
        return r;

    /* Address=address/prefixlen */

    /* prefixlen */
    e = strchr(rvalue, '/');
    if (e) {
        unsigned i;
        r = safe_atou(e + 1, &i);
        if (r < 0) {
            log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                       "Interface prefix length is invalid, "
                       "ignoring assignment: %s", e + 1);
            return 0;
        }

        n->prefixlen = (unsigned char) i;

        address = strndup(rvalue, e - rvalue);
        if (!address)
            return log_oom();
    } else {
        address = strdup(rvalue);
        if (!address)
            return log_oom();
    }

    r = net_parse_inaddr(address, &n->family, &n->in_addr);
    if (r < 0) {
        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                   "Address is invalid, ignoring assignment: %s", address);
        return 0;
    }

    if (n->family == AF_INET && !n->broadcast.s_addr)
        n->broadcast.s_addr = n->in_addr.in.s_addr |
                              htonl(0xfffffffflu >> n->prefixlen);

    n = NULL;

    return 0;
}
Exemplo n.º 6
0
int config_parse_destination(const char *unit,
                const char *filename,
                unsigned line,
                const char *section,
                unsigned section_line,
                const char *lvalue,
                int ltype,
                const char *rvalue,
                void *data,
                void *userdata) {
        Network *network = userdata;
        _cleanup_route_free_ Route *n = NULL;
        _cleanup_free_ char *address = NULL;
        const char *e;
        int r;

        assert(filename);
        assert(section);
        assert(lvalue);
        assert(rvalue);
        assert(data);

        r = route_new_static(network, section_line, &n);
        if (r < 0)
                return r;

        /* Destination=address/prefixlen */

        /* address */
        e = strchr(rvalue, '/');
        if (e) {
                address = strndup(rvalue, e - rvalue);
                if (!address)
                        return log_oom();
        } else {
                address = strdup(rvalue);
                if (!address)
                        return log_oom();
        }

        r = net_parse_inaddr(address, &n->family, &n->dst_addr);
        if (r < 0) {
                log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                           "Destination is invalid, ignoring assignment: %s", address);
                return 0;
        }

        /* prefixlen */
        if (e) {
                unsigned i;

                r = safe_atou(e + 1, &i);
                if (r < 0) {
                        log_syntax(unit, LOG_ERR, filename, line, EINVAL,
                                   "Route destination prefix length is invalid, "
                                   "ignoring assignment: %s", e + 1);
                        return 0;
                }

                n->dst_prefixlen = (unsigned char) i;
        } else {
                switch (n->family) {
                        case AF_INET:
                                n->dst_prefixlen = 32;
                                break;
                        case AF_INET6:
                                n->dst_prefixlen = 128;
                                break;
                }
        }

        n = NULL;

        return 0;
}