prevent autostart of interfaces during config init
[project/netifd.git] / proto.c
1 #include <string.h>
2 #include <stdlib.h>
3 #include <stdio.h>
4
5 #include "netifd.h"
6 #include "interface.h"
7 #include "proto.h"
8
9 static void
10 default_proto_free(struct interface_proto_state *proto)
11 {
12         free(proto);
13 }
14
15 static int
16 default_proto_handler(struct interface_proto_state *proto,
17                       enum interface_proto_cmd cmd, bool force)
18 {
19         return 0;
20 }
21
22 struct interface_proto_state *get_default_proto(void)
23 {
24         struct interface_proto_state *proto;
25
26         proto = calloc(1, sizeof(*proto));
27         proto->handler = default_proto_handler;
28         proto->free = default_proto_free;
29         proto->flags = PROTO_FLAG_IMMEDIATE;
30
31         return proto;
32 }
33
34 int interface_proto_event(struct interface_proto_state *proto,
35                           enum interface_proto_cmd cmd, bool force)
36 {
37         enum interface_event ev;
38         int ret;
39
40         ret = proto->handler(proto, cmd, force);
41         if (ret || !(proto->flags & PROTO_FLAG_IMMEDIATE))
42                 goto out;
43
44         switch(cmd) {
45         case PROTO_CMD_SETUP:
46                 ev = IFEV_UP;
47                 break;
48         case PROTO_CMD_TEARDOWN:
49                 ev = IFEV_DOWN;
50                 break;
51         default:
52                 return -EINVAL;
53         }
54         proto->proto_event(proto, ev);
55
56 out:
57         return ret;
58 }