#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;
#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;
#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;
}
#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;
}
#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:
* 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;
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;
client_t *clients;
int registration;
int participant;
+ int schedule_tx_flag;
};
int mrp_client_add(client_t ** list, struct sockaddr_in *newclient);
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);
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)
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);
}
}
#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;
#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;
#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;
}
#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;
}
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) {
#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;
#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;
#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;
}
#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;
}
#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: