mrpd: schedule TX for MSRP, MVRP, MMRP separately
authorDelio Brignoli <dbrignoli@audioscience.com>
Thu, 25 Oct 2012 17:55:08 +0000 (10:55 -0700)
committerDelio Brignoli <dbrignoli@audioscience.com>
Thu, 25 Oct 2012 18:04:48 +0000 (11:04 -0700)
daemons/mrpd/mmrp.c
daemons/mrpd/mrp.c
daemons/mrpd/mrp.h
daemons/mrpd/mrpd.c
daemons/mrpd/msrp.c
daemons/mrpd/mvrp.c

index 726098f..3a024dc 100644 (file)
@@ -207,7 +207,7 @@ int mmrp_event(int event, struct mmrp_attribute *rattrib)
 #if LOG_MMRP
                        printf("MMRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TXLA);
+                       mrp_applicant_fsm(&(MMRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TXLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MMRP_db->mrp_db), MRP_EVENT_TXLA);
                        attrib = attrib->next;
@@ -226,7 +226,7 @@ int mmrp_event(int event, struct mmrp_attribute *rattrib)
 #if LOG_MMRP
                        printf("MMRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_RLA);
+                       mrp_applicant_fsm(&(MMRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_RLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MMRP_db->mrp_db), MRP_EVENT_RLA);
                        attrib = attrib->next;
@@ -243,7 +243,7 @@ int mmrp_event(int event, struct mmrp_attribute *rattrib)
 #if LOG_MMRP
                        printf("MMRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TX);
+                       mrp_applicant_fsm(&(MMRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TX);
                        attrib = attrib->next;
                }
 
@@ -270,7 +270,7 @@ int mmrp_event(int event, struct mmrp_attribute *rattrib)
 #if LOG_MMRP
                        printf("MMRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant),
+                       mrp_applicant_fsm(&(MMRP_db->mrp_db), &(attrib->applicant),
                                          MRP_EVENT_PERIODIC);
                        attrib = attrib->next;
                }
@@ -302,7 +302,7 @@ int mmrp_event(int event, struct mmrp_attribute *rattrib)
 #if LOG_MMRP
                printf("MMRP -> mrp_applicant_fsm\n");
 #endif
-               mrp_applicant_fsm(&(attrib->applicant), event);
+               mrp_applicant_fsm(&(MMRP_db->mrp_db), &(attrib->applicant), event);
                /* remap local requests into registrar events */
                switch (event) {
                case MRP_EVENT_NEW:
index c98b736..aeda689 100644 (file)
@@ -361,7 +361,7 @@ int mrp_periodictimer_fsm(struct mrp_database *mrp_db, int event)
  * per-attribute MRP FSM
  */
 
-int mrp_applicant_fsm(mrp_applicant_attribute_t * attrib, int event)
+int mrp_applicant_fsm(struct mrp_database *mrp_db, mrp_applicant_attribute_t * attrib, int event)
 {
        int tx = 0;
        int optional = 0;
@@ -713,7 +713,7 @@ int mrp_applicant_fsm(mrp_applicant_attribute_t * attrib, int event)
                case  MRP_LA_STATE:
                case  MRP_AP_STATE:
                case  MRP_LO_STATE:
-                       mrp_schedule_tx_event();
+                       mrp_schedule_tx_event(mrp_db);
                        break;
                default:
                        break;
index 98496e6..f0177c0 100644 (file)
@@ -177,6 +177,7 @@ struct mrp_database {
        client_t *clients;
        int registration;
        int participant;
+       int schedule_tx_flag;
 };
 
 int mrp_client_add(client_t ** list, struct sockaddr_in *newclient);
@@ -190,10 +191,10 @@ int mrp_lvtimer_stop(struct mrp_database *mrp_db);
 int mrp_lvatimer_start(struct mrp_database *mrp_db);
 int mrp_lvatimer_stop(struct mrp_database *mrp_db);
 int mrp_lvatimer_fsm(struct mrp_database *mrp_db, int event);
-int mrp_applicant_fsm(mrp_applicant_attribute_t * attrib, int event);
+int mrp_applicant_fsm(struct mrp_database *mrp_db, mrp_applicant_attribute_t * attrib, int event);
 int mrp_registrar_fsm(mrp_registrar_attribute_t * attrib,
                      struct mrp_database *mrp_db, int event);
 int mrp_decode_state(mrp_registrar_attribute_t * rattrib,
                     mrp_applicant_attribute_t * aattrib, char *str,
                     int strlen);
-void mrp_schedule_tx_event(void);
+void mrp_schedule_tx_event(struct mrp_database *mrp_db);
index 78c2697..a15710a 100644 (file)
@@ -110,10 +110,11 @@ extern struct mmrp_database *MMRP_db;
 extern struct mvrp_database *MVRP_db;
 extern struct msrp_database *MSRP_db;
 
-void mrp_schedule_tx_event(void)
+void mrp_schedule_tx_event(struct mrp_database *mrp_db)
 {
        uint64_t one = 1;
        write(txnowevt_fd, &one, sizeof(one));
+       mrp_db->schedule_tx_flag = 1;
 }
 
 int mrpd_timer_create(void)
@@ -718,13 +719,16 @@ void process_events(void)
                        if (FD_ISSET(txnowevt_fd, &sel_fds)) {
                                uint64_t count;
                                read(txnowevt_fd, &count, sizeof(count));
-                               if (mmrp_enable) {
+                               if (mmrp_enable && MMRP_db->mrp_db.schedule_tx_flag) {
+                                       MMRP_db->mrp_db.schedule_tx_flag = 0;
                                        mmrp_event(MRP_EVENT_TX, NULL);
                                }
-                               if (mvrp_enable) {
+                               if (mvrp_enable && MVRP_db->mrp_db.schedule_tx_flag) {
+                                       MVRP_db->mrp_db.schedule_tx_flag = 0;
                                        mvrp_event(MRP_EVENT_TX, NULL);
                                }
-                               if (msrp_enable) {
+                               if (msrp_enable && MSRP_db->mrp_db.schedule_tx_flag) {
+                                       MSRP_db->mrp_db.schedule_tx_flag = 0;
                                        msrp_event(MRP_EVENT_TX, NULL);
                                }
                        }
index e8b583d..9954e60 100644 (file)
@@ -255,7 +255,7 @@ int msrp_event(int event, struct msrp_attribute *rattrib)
 #if LOG_MSRP
                        printf("MSRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TXLA);
+                       mrp_applicant_fsm(&(MSRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TXLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MSRP_db->mrp_db), MRP_EVENT_TXLA);
                        attrib = attrib->next;
@@ -274,7 +274,7 @@ int msrp_event(int event, struct msrp_attribute *rattrib)
 #if LOG_MSRP
                        printf("MSRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_RLA);
+                       mrp_applicant_fsm(&(MSRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_RLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MSRP_db->mrp_db), MRP_EVENT_RLA);
                        attrib = attrib->next;
@@ -291,7 +291,7 @@ int msrp_event(int event, struct msrp_attribute *rattrib)
 #if LOG_MSRP
                        printf("MSRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TX);
+                       mrp_applicant_fsm(&(MSRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TX);
                        attrib = attrib->next;
                }
 
@@ -318,7 +318,7 @@ int msrp_event(int event, struct msrp_attribute *rattrib)
 #if LOG_MSRP
                        printf("MSRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant),
+                       mrp_applicant_fsm(&(MSRP_db->mrp_db), &(attrib->applicant),
                                          MRP_EVENT_PERIODIC);
                        attrib = attrib->next;
                }
@@ -347,7 +347,7 @@ int msrp_event(int event, struct msrp_attribute *rattrib)
                        free(rattrib);
                }
 
-               mrp_applicant_fsm(&(attrib->applicant), event);
+               mrp_applicant_fsm(&(MSRP_db->mrp_db), &(attrib->applicant), event);
 
                /* remap local requests into registrar events */
                switch (event) {
index cf453b3..fcdbdef 100644 (file)
@@ -153,7 +153,7 @@ int mvrp_event(int event, struct mvrp_attribute *rattrib)
 #if LOG_MVRP
                        printf("MVRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TXLA);
+                       mrp_applicant_fsm(&(MVRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TXLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MVRP_db->mrp_db), MRP_EVENT_TXLA);
                        attrib = attrib->next;
@@ -172,7 +172,7 @@ int mvrp_event(int event, struct mvrp_attribute *rattrib)
 #if LOG_MVRP
                        printf("MVRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_RLA);
+                       mrp_applicant_fsm(&(MVRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_RLA);
                        mrp_registrar_fsm(&(attrib->registrar),
                                          &(MVRP_db->mrp_db), MRP_EVENT_RLA);
                        attrib = attrib->next;
@@ -189,7 +189,7 @@ int mvrp_event(int event, struct mvrp_attribute *rattrib)
 #if LOG_MVRP
                        printf("MVRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant), MRP_EVENT_TX);
+                       mrp_applicant_fsm(&(MVRP_db->mrp_db), &(attrib->applicant), MRP_EVENT_TX);
                        attrib = attrib->next;
                }
 
@@ -216,7 +216,7 @@ int mvrp_event(int event, struct mvrp_attribute *rattrib)
 #if LOG_MVRP
                        printf("MVRP -> mrp_applicant_fsm\n");
 #endif
-                       mrp_applicant_fsm(&(attrib->applicant),
+                       mrp_applicant_fsm(&(MVRP_db->mrp_db), &(attrib->applicant),
                                          MRP_EVENT_PERIODIC);
                        attrib = attrib->next;
                }
@@ -248,7 +248,7 @@ int mvrp_event(int event, struct mvrp_attribute *rattrib)
 #if LOG_MVRP
                printf("MVRP -> mrp_applicant_fsm\n");
 #endif
-               mrp_applicant_fsm(&(attrib->applicant), event);
+               mrp_applicant_fsm(&(MVRP_db->mrp_db), &(attrib->applicant), event);
                /* remap local requests into registrar events */
                switch (event) {
                case MRP_EVENT_NEW: