+ struct static_proto_state *state;
+ struct device *dev;
+ int ret = 0;
+ int i;
+
+ state = container_of(proto, struct static_proto_state, proto);
+ dev = state->iface->main_dev.dev;
+
+ switch (cmd) {
+ case PROTO_CMD_SETUP:
+ for (i = 0; i < state->n_v4; i++) {
+ if (ret)
+ break;
+ ret = system_add_address(dev, AF_INET,
+ &state->v4[i].addr, state->v4[i].prefix);
+ }
+ for (i = 0; i < state->n_v6; i++) {
+ if (ret)
+ break;
+ ret = system_add_address(dev, AF_INET6,
+ &state->v6[i].addr, state->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 < state->n_v4; i++)
+ system_del_address(dev, AF_INET, &state->v4[i].addr);
+ for (i = 0; i < state->n_v6; i++)
+ system_del_address(dev, AF_INET6, &state->v6[i].addr);
+ break;
+ }
+ return ret;