/* state machine controls */
int p2pmac;
-#if LOG_MRP
static char *mrp_event_string(int e)
{
switch (e) {
}
}
+#if LOG_MRP
static char *mrp_state_string(int s)
{
switch (s) {
int mrp_lvatimer_start(struct mrp_database *mrp_db)
{
- int ret;
+ int ret = 0;
int timeout = 0;
/* leavealltimer has expired. (10.7.5.22)
* on expire, sends a LEAVEALL message
timeout = MRP_LVATIMER_VAL + (random() % (MRP_LVATIMER_VAL / 2));
#if LOG_TIMERS
if (mrp_db->lva_timer_running)
- mrpd_log_printf("MRP start leaveAll timer (%d ms) *ALREADY RUNNING* \n", timeout);
+ mrpd_log_printf("MRP leaveAll timer already running \n", timeout);
else
mrpd_log_printf("MRP start leaveAll timer (%d ms)\n", timeout);
#endif
- ret = mrpd_timer_start(mrp_db->lva_timer, timeout);
+ if (!mrp_db->lva_timer_running)
+ ret = mrpd_timer_start(mrp_db->lva_timer, timeout);
if (ret >= 0)
mrp_db->lva_timer_running = 1;
return ret;
int optional = 0;
int mrp_state = attrib->mrp_state;
int sndmsg = MRP_SND_NULL;
+ (void)mrp_db;
switch (event) {
case MRP_EVENT_BEGIN:
break;
default:
- printf("mrp_applicant_fsm:unexpected event (%d)\n", event);
+ printf("mrp_applicant_fsm:unexpected event %s (%d)\n", mrp_event_string(event), event);
return -1;
break;
}
/*
See note 6, table 10.3
*/
+#if MRP_USE_TXNOW
if ((attrib->mrp_state != mrp_state) && (event != MRP_EVENT_TX) && (event != MRP_EVENT_TXLA)) {
switch (mrp_state) {
case MRP_VP_STATE:
break;
}
}
+#endif
+
#if LOG_MVRP || LOG_MSRP || LOG_MMRP
if (attrib->mrp_state != mrp_state) {
mrpd_log_printf("mrp_applicant_fsm event %s, state %s -> %s\n",
/* ignore on soon to be deleted attributes */
break;
default:
- printf("mrp_registrar_fsm:unexpected event (%d)\n", event);
+ printf("mrp_registrar_fsm:unexpected event %s (%d)\n", mrp_event_string(event), event);
return -1;
break;
}
******************************************************************************/
-/* control debug output on stdout */
-#define LOG_MRP 0
+/* control debug logging output on stdout */
+#define LOG_MRP 1
#define LOG_MVRP 0
#define LOG_MMRP 0
-#define LOG_MSRP 0
+#define LOG_MSRP 1
#define LOG_TIMERS 0
-#define LOG_TXNOW 0
+#define LOG_TXNOW 1
#define LOG_CLIENT_RECV 0
#define LOG_CLIENT_SEND 0
#define MRP_ENCODE_YES 0 /* must send */
#define MRP_ENCODE_OPTIONAL 1 /* send if smaller */
+#define MRP_USE_TXNOW 0 /* use TXNOW (join timer shortcut) */
typedef struct mrp_applicant_attribute {
int mrp_state;
memset(respbuf, 0, sizeof(respbuf));
+#if LOG_CLIENT_RECV
if (logging_enable)
printf("CMD:%s from CLNT %d\n", buf, client->sin_port);
+#endif
if (buflen < 3) {
printf("buflen = %d!\b", buflen);
if (INVALID_SOCKET == control_socket)
return 0;
+#if LOG_CLIENT_SEND
printf("CTL MSG:%s to CLNT %d\n", notify_data,
client_addr->sin_port);
+#endif
rc = sendto(control_socket, notify_data, notify_len,
0, (struct sockaddr *)client_addr, sizeof(struct sockaddr));
return rc;
SOCKET msrp_socket;
struct msrp_database *MSRP_db;
+static char *msrp_attrib_type_string(int t)
+{
+ switch (t) {
+ case MSRP_TALKER_ADV_TYPE:
+ return "Talker Advertise";
+ case MSRP_TALKER_FAILED_TYPE:
+ return "Talker Failed";
+ case MSRP_LISTENER_TYPE:
+ return "Listener";
+ case MSRP_DOMAIN_TYPE:
+ return "Domain";
+ default:
+ return "TYPE ???";
+ }
+}
+
+
+
struct msrp_attribute *msrp_lookup(struct msrp_attribute *rattrib)
{
struct msrp_attribute *attrib;
rc = mrp_registrar_fsm(&(attrib->registrar),
&(MSRP_db->mrp_db), event);
if (-1 == rc) {
- printf
- ("MSRP registrar error on attrib->type = %d\n",
- attrib->type);
+ printf("MSRP registrar error on attrib->type = %s (%d)\n",
+ msrp_attrib_type_string(attrib->type),
+ attrib->type);
}
break;
}
endmarks = 0;
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() START\n");
+#endif
+
while (mrpdu_msg_ptr < (mrpdu_msg_eof - 2)) {
mrpdu_msg = (mrpdu_message_t *) mrpdu_msg_ptr;
if ((mrpdu_msg->AttributeType == 0) &&
}
endmarks = 0;
+
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() msg addr 0x%X\n", ((int)mrpdu_msg_ptr) & 0x3);
+#endif
+
switch (mrpdu_msg->AttributeType) {
case MSRP_DOMAIN_TYPE:
if (mrpdu_msg->AttributeLength != 4) {
MRPDU_VECT_NUMVALUES(ntohs
(mrpdu_vectorptr->VectorHeader));
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() LISTENER vector addr 0x%X, n = %d, VectorHeader (ntohs) %d, VectorHeader read %d\n",
+ ((int)mrpdu_vectorptr) & 0x3, numvalues,
+ ntohs(mrpdu_vectorptr->VectorHeader),
+ ((uint8_t *)mrpdu_vectorptr)[0] << 8 | ((uint8_t *)mrpdu_vectorptr)[1]);
+#endif
+
+
+
if (0 == numvalues) {
/* 2 byte numvalues + 8 byte FirstValue + (0) vector bytes */
mrpdu_msg_ptr =
registrar.macaddr,
eth->srcaddr, 6);
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() Listener[%d][%d] attrib %d\n",
+ vectidx,
+ vectevt_idx,
+ vectevt[vectevt_idx]);
+#endif
+
switch (vectevt[vectevt_idx]) {
case MRPDU_NEW:
msrp_event
registrar.macaddr,
eth->srcaddr, 6);
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() TalkerAdv[%d][%d] attrib %d\n",
+ vectidx,
+ vectevt_idx,
+ vectevt[vectevt_idx]);
+#endif
+
switch (vectevt[vectevt_idx]) {
case MRPDU_NEW:
msrp_event
* we can seek for an endmark to recover .. but this version
* dumps the entire packet as malformed
*/
- printf("unrecognized attribute type (%d)\n",
+ printf("################## unrecognized attribute type (%d)\n",
mrpdu_msg->AttributeType);
goto out;
}
attriblistlen = mrpdu_msg_ptr - &(mrpdu_msg->Data[2]);
mrpdu_msg->Data[0] = (uint8_t) (attriblistlen >> 8);
mrpdu_msg->Data[1] = (uint8_t) attriblistlen;
+
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() DONE (OK)\n");
+#endif
return 0;
oops:
+#if LOG_MSRP
+ mrpd_log_printf("MSRP msrp_recv_msg() DONE (OOPS)\n");
+#endif
/* an internal error - caller should assume TXLAF */
*bytes_used = 0;
return -1;