- state = container_of(proto, struct static_proto_state, proto);
- ps = &state->s;
- dev = state->iface->main_dev.dev;
-
- switch (cmd) {
- case PROTO_CMD_SETUP:
- for (i = 0; i < state->s.n_v4; i++) {
- if (ret)
- break;
- ret = system_add_address(dev, AF_INET,
- &ps->v4[i].addr, ps->v4[i].prefix);
- }
- for (i = 0; i < state->s.n_v6; i++) {
- if (ret)
- break;
- ret = system_add_address(dev, AF_INET6,
- &ps->v6[i].addr, ps->v6[i].prefix);
- }
-
- if (!ret)
- return 0;
-
- interface_add_error(state->iface, "proto-static",
- "SET_ADDRESS_FAILED", NULL, 0);
- /* fall through */
-
- case PROTO_CMD_TEARDOWN:
- for (i = 0; i < ps->n_v4; i++)
- system_del_address(dev, AF_INET, &ps->v4[i].addr);
- for (i = 0; i < ps->n_v6; i++)
- system_del_address(dev, AF_INET6, &ps->v6[i].addr);
- break;
+ addr = proto_parse_ip_addr_string(str, v6, mask);
+ if (!addr) {
+ interface_add_error(iface, "proto-static", "INVALID_ADDRESS", &str, 1);
+ return false;