From 0538e95be8dc7077e227b40bcf9c57201867f782 Mon Sep 17 00:00:00 2001 From: Jeremy Lakeman Date: Wed, 19 Sep 2012 15:55:29 +0930 Subject: [PATCH] Reduce the potential for packet storms --- dataformats.c | 9 +++++++++ overlay_interface.c | 5 ++++- overlay_mdp.c | 23 +++++++---------------- serval.h | 2 ++ 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/dataformats.c b/dataformats.c index 5c7cc672..21132ce9 100644 --- a/dataformats.c +++ b/dataformats.c @@ -57,6 +57,15 @@ int is_xstring(const char *text, int len) return _is_xstring(text, len); } +/* Does this whole buffer contain the same value? */ +int is_all_matching(unsigned char *ptr, int len, int value){ + int i; + for (i=0;isendBroadcast){ + if (frame->ttl>2) + frame->ttl=2; frame->sendBroadcast=1; - overlay_broadcast_generate_address(&frame->broadcast_id); + if (is_all_matching(frame->broadcast_id.id, BROADCAST_LEN, 0)) + overlay_broadcast_generate_address(&frame->broadcast_id); int i; for(i=0;ibroadcast_sent_via[i]=0; diff --git a/overlay_mdp.c b/overlay_mdp.c index a44a7512..2ae2132b 100644 --- a/overlay_mdp.c +++ b/overlay_mdp.c @@ -37,22 +37,10 @@ struct sched_ent mdp_named={ }; // is the SID entirely 0xFF? -static int is_broadcast(const unsigned char *sid){ - int i; - for (i=0;iout.src.sid, 7), mdp->out.src.port,mdp->out.dst.port); @@ -499,6 +487,9 @@ int overlay_saw_mdp_frame(overlay_mdp_frame *mdp, time_ms_t now) bcopy(&mdp->out.payload[0],&did[0],pll); did[pll]=0; + if (debug & DEBUG_MDPREQUESTS) + DEBUG("MDP_PORT_DNALOOKUP"); + int results=0; while(keyring_find_did(keyring,&cn,&in,&kp,did)) { diff --git a/serval.h b/serval.h index 6c6a6c2d..23c97f79 100644 --- a/serval.h +++ b/serval.h @@ -456,6 +456,8 @@ int fromhexstr(unsigned char *dstBinary, const char *srcHex, size_t bytes); int hexvalue(char c); char *str_toupper_inplace(char *s); +int is_all_matching(unsigned char *ptr, int len, int value); + int str_is_subscriber_id(const char *sid); int strn_is_subscriber_id(const char *sid, size_t *lenp); int str_is_did(const char *did);