diff options
Diffstat (limited to 'src/ipcpd/normal')
| -rw-r--r-- | src/ipcpd/normal/connmgr.c | 7 | ||||
| -rw-r--r-- | src/ipcpd/normal/connmgr.h | 21 | ||||
| -rw-r--r-- | src/ipcpd/normal/sdu_sched.c | 25 | 
3 files changed, 38 insertions, 15 deletions
diff --git a/src/ipcpd/normal/connmgr.c b/src/ipcpd/normal/connmgr.c index 9530633b..bf07ebc4 100644 --- a/src/ipcpd/normal/connmgr.c +++ b/src/ipcpd/normal/connmgr.c @@ -193,7 +193,9 @@ static void handle_event(void *       self,          (void) self; -        if (!(event == NOTIFY_DT_FLOW_UP || event == NOTIFY_DT_FLOW_DOWN)) +        if (!(event == NOTIFY_DT_FLOW_UP || +              event == NOTIFY_DT_FLOW_DOWN || +              event == NOTIFY_DT_FLOW_DEALLOC))                  return;          if (get_conn_by_fd(*((int *) o), COMPID_DT, &conn)) @@ -206,6 +208,9 @@ static void handle_event(void *       self,          case NOTIFY_DT_FLOW_DOWN:                  notifier_event(NOTIFY_DT_CONN_DOWN, &conn);                  break; +        case NOTIFY_DT_FLOW_DEALLOC: +                notifier_event(NOTIFY_DT_CONN_DEL, &conn); +                break;          default:                  break;          } diff --git a/src/ipcpd/normal/connmgr.h b/src/ipcpd/normal/connmgr.h index 510b8e4e..a7e8a6e0 100644 --- a/src/ipcpd/normal/connmgr.h +++ b/src/ipcpd/normal/connmgr.h @@ -28,16 +28,17 @@  #include "comp.h" -#define NOTIFY_DT_CONN_ADD    0x00D0 -#define NOTIFY_DT_CONN_DEL    0x00D1 -#define NOTIFY_DT_CONN_QOS    0x00D2 -#define NOTIFY_DT_CONN_UP     0x00D3 -#define NOTIFY_DT_CONN_DOWN   0x00D4 -#define NOTIFY_DT_FLOW_UP     0x00D5 -#define NOTIFY_DT_FLOW_DOWN   0x00D6 - -#define NOTIFY_MGMT_CONN_ADD  0x00F0 -#define NOTIFY_MGMT_CONN_DEL  0x00F1 +#define NOTIFY_DT_CONN_ADD     0x00D0 +#define NOTIFY_DT_CONN_DEL     0x00D1 +#define NOTIFY_DT_CONN_QOS     0x00D2 +#define NOTIFY_DT_CONN_UP      0x00D3 +#define NOTIFY_DT_CONN_DOWN    0x00D4 +#define NOTIFY_DT_FLOW_UP      0x00D5 +#define NOTIFY_DT_FLOW_DOWN    0x00D6 +#define NOTIFY_DT_FLOW_DEALLOC 0x00D7 + +#define NOTIFY_MGMT_CONN_ADD   0x00F0 +#define NOTIFY_MGMT_CONN_DEL   0x00F1  int         connmgr_init(void); diff --git a/src/ipcpd/normal/sdu_sched.c b/src/ipcpd/normal/sdu_sched.c index 0ae22895..6ce18ed5 100644 --- a/src/ipcpd/normal/sdu_sched.c +++ b/src/ipcpd/normal/sdu_sched.c @@ -25,9 +25,11 @@  #include "config.h"  #include <ouroboros/errno.h> +#include <ouroboros/notifier.h>  #include "ipcp.h"  #include "sdu_sched.h" +#include "connmgr.h"  #include <assert.h>  #include <sched.h> @@ -86,10 +88,25 @@ static void * sdu_reader(void * o)                          continue;                  while ((fd = fqueue_next(fq)) >= 0) { -                        if (ipcp_flow_read(fd, &sdb)) -                                continue; - -                        sched->callback(fd, qc, sdb); +                        switch (fqueue_type(fq)) { +                        case FLOW_DEALLOC: +                                notifier_event(NOTIFY_DT_FLOW_DEALLOC, &fd); +                                break; +                        case FLOW_DOWN: +                                notifier_event(NOTIFY_DT_FLOW_DOWN, &fd); +                                break; +                        case FLOW_UP: +                                notifier_event(NOTIFY_DT_FLOW_UP, &fd); +                                break; +                        case FLOW_PKT: +                                if (ipcp_flow_read(fd, &sdb)) +                                        continue; + +                                sched->callback(fd, qc, sdb); +                                break; +                        default: +                                break; +                        }                  }          }  | 
