Hide more information about packet headers

This commit is contained in:
Jeremy Lakeman 2012-11-21 15:30:20 +10:30
parent 4ca6db34d6
commit 3d14e2f3db
7 changed files with 30 additions and 80 deletions

View File

@ -331,7 +331,8 @@ overlay_interface_read_any(struct sched_ent *alarm){
DEBUGF("Received %d bytes from %s on interface %s (ANY)",plen,
inet_ntoa(src),
interface->name);
if (packetOk(interface,packet,plen,NULL,recvttl,&src_addr,addrlen,1)) {
if (packetOkOverlay(interface, packet, plen, recvttl, &src_addr, addrlen)) {
WHY("Malformed packet");
}
}
@ -593,7 +594,7 @@ static void overlay_interface_poll(struct sched_ent *alarm)
inet_ntoa(src),
interface->name);
}
if (packetOk(interface,packet,plen,NULL,recvttl,&src_addr,addrlen,1)) {
if (packetOkOverlay(interface, packet, plen, recvttl, &src_addr, addrlen)) {
WHY("Malformed packet");
// Do we really want to attempt to parse it again?
//DEBUG_packet_visualise("Malformed packet", packet,plen);
@ -616,7 +617,6 @@ void overlay_dummy_poll(struct sched_ent *alarm)
int plen=0;
struct sockaddr src_addr;
size_t addrlen = sizeof(src_addr);
unsigned char transaction_id[8];
time_ms_t now = gettime_ms();
/* Read from dummy interface file */
@ -651,17 +651,10 @@ void overlay_dummy_poll(struct sched_ent *alarm)
plen = -1;
if (debug&DEBUG_PACKETRX)
DEBUG_packet_visualise("Read from dummy interface", &packet[128], plen);
bzero(&transaction_id[0],8);
bzero(&src_addr,sizeof(src_addr));
if (plen >= 4) {
if (packet[0] == 0x01 && packet[1] == 0 && packet[2] == 0 && packet[3] == 0) {
if (packetOk(interface,&packet[128],plen,transaction_id, -1 /* fake TTL */, &src_addr,addrlen,1) == -1)
WARN("Unsupported packet from dummy interface");
} else {
WARNF("Unsupported packet version from dummy interface: %02x %02x %02x %02x", packet[0], packet[1], packet[2], packet[3]);
}
} else {
WARNF("Invalid packet from dummy interface: plen=%lld", (long long) plen);
if (packetOkOverlay(interface, &packet[128], plen, -1, &src_addr, addrlen)) {
WARN("Unsupported packet from dummy interface");
}
}
else

View File

@ -25,6 +25,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
struct sockaddr_in loopback;
unsigned char magic_header[]={/* Magic */ 'O',0x10,
/* Version */ 0x00,0x01};
int overlay_packet_init_header(struct overlay_buffer *buff){
return ob_append_bytes(buff,magic_header,4);
}
// a frame destined for one of our local addresses, or broadcast, has arrived. Process it.
int process_incoming_frame(time_ms_t now, struct overlay_interface *interface, struct overlay_frame *f, struct decode_context *context){
int id = (interface - overlay_interfaces);
@ -107,8 +115,7 @@ int overlay_forward_payload(struct overlay_frame *f){
}
int packetOkOverlay(struct overlay_interface *interface,unsigned char *packet, size_t len,
unsigned char *transaction_id,int recvttl,
struct sockaddr *recvaddr, size_t recvaddrlen, int parseP)
int recvttl, struct sockaddr *recvaddr, size_t recvaddrlen)
{
/*
This function decodes overlay packets which have been assembled for delivery overy IP networks.
@ -167,11 +174,17 @@ int packetOkOverlay(struct overlay_interface *interface,unsigned char *packet, s
.please_explain=NULL,
};
if (len<HEADERFIELDS_LEN)
return WHY("Packet is too short");
time_ms_t now = gettime_ms();
struct overlay_buffer *b = ob_static(packet, len);
ob_limitsize(b, len);
// skip magic bytes and version as they have already been parsed
b->position=4;
if (ob_get(b)!=magic_header[0] || ob_get(b)!=magic_header[1]
|| ob_get(b)!=magic_header[2] || ob_get(b)!=magic_header[3])
return WHY("Packet type not recognised.");
bzero(&f,sizeof(struct overlay_frame));

View File

@ -22,13 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "overlay_buffer.h"
#include "overlay_packet.h"
unsigned char magic_header[]={/* Magic */ 'O',0x10,
/* Version */ 0x00,0x01};
int overlay_packet_init_header(struct outgoing_packet *packet){
return ob_append_bytes(packet->buffer,magic_header,4);
}
int overlay_packet_append_header(struct overlay_buffer *buff, int type, int ttl, int approx_size){
if (ob_append_byte(buff, type)) return -1;
if (ob_append_byte(buff, ttl)) return -1;

View File

@ -233,7 +233,7 @@ int overlay_payload_enqueue(struct overlay_frame *p)
static void overlay_add_sender_header(struct overlay_buffer *buff, overlay_interface *interface)
{
// add a badly formatted dummy self announce payload to tell people we sent this.
// add a badly addressed dummy self announce payload to tell people we sent this.
overlay_packet_append_header(buff, OF_TYPE_SELFANNOUNCE, 1, SID_SIZE + 2);
/* from me, to me, via me
@ -241,10 +241,10 @@ static void overlay_add_sender_header(struct overlay_buffer *buff, overlay_inter
and receivers wont try to process it
since its not going to have a payload body anyway) */
overlay_address_append_self(interface, buff);
overlay_address_append(buff, my_subscriber);
overlay_address_append(buff, my_subscriber);
overlay_address_set_sender(my_subscriber);
ob_append_byte(buff, OA_CODE_PREVIOUS);
ob_append_byte(buff, OA_CODE_PREVIOUS);
// no payload body..
ob_patch_rfs(buff, COMPUTE_RFS_LENGTH);
}
@ -257,7 +257,7 @@ overlay_init_packet(struct outgoing_packet *packet, overlay_interface *interface
packet->add_advertisements=1;
ob_limitsize(packet->buffer, packet->interface->mtu);
overlay_packet_init_header(packet);
overlay_packet_init_header(packet->buffer);
overlay_address_clear();

View File

@ -1,42 +0,0 @@
/*
Serval Distributed Numbering Architecture (DNA)
Copyright (C) 2010 Paul Gardner-Stephen
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "serval.h"
int packetOk(struct overlay_interface *interface, unsigned char *packet, size_t len,
unsigned char *transaction_id,int ttl,
struct sockaddr *recvaddr, size_t recvaddrlen,int parseP)
{
if (len<HEADERFIELDS_LEN) return WHY("Packet is too short");
if (packet[0]==0x4F&&packet[1]==0x10)
{
if (interface!=NULL)
{
return packetOkOverlay(interface,packet,len,transaction_id,ttl,
recvaddr,recvaddrlen,parseP);
}
else
/* We ignore overlay mesh packets in simple server mode, which is indicated by interface==-1 */
return WHY("Ignoring overlay mesh packet");
}
return WHY("Packet type not recognised.");
}

View File

@ -330,7 +330,6 @@ struct sched_ent{
struct overlay_buffer;
struct overlay_frame;
#define STRUCT_SCHED_ENT_UNUSED ((struct sched_ent){NULL, NULL, NULL, NULL, {-1, 0, 0}, 0LL, 0LL, NULL, -1})
extern int overlayMode;
@ -427,14 +426,9 @@ void serverCleanUp();
int isTransactionInCache(unsigned char *transaction_id);
void insertTransactionInCache(unsigned char *transaction_id);
int packetOk(struct overlay_interface *interface,unsigned char *packet, size_t len,
unsigned char *transaction_id, int recvttl,
struct sockaddr *recvaddr, size_t recvaddrlen,int parseP);
int overlay_forward_payload(struct overlay_frame *f);
int packetOkOverlay(struct overlay_interface *interface,unsigned char *packet, size_t len,
unsigned char *transaction_id,int recvttl,
struct sockaddr *recvaddr, size_t recvaddrlen,int parseP);
int recvttl, struct sockaddr *recvaddr, size_t recvaddrlen);
int overlay_frame_process(struct overlay_interface *interface, struct overlay_frame *f);
int overlay_frame_resolve_addresses(struct overlay_frame *f);
@ -447,7 +441,7 @@ time_ms_t overlay_time_until_next_tick();
int overlay_add_selfannouncement();
int overlay_frame_append_payload(overlay_interface *interface, struct overlay_frame *p, struct subscriber *next_hop, struct overlay_buffer *b);
int overlay_packet_init_header(struct outgoing_packet *packet);
int overlay_packet_init_header(struct overlay_buffer *buff);
int overlay_packet_append_header(struct overlay_buffer *buff, int type, int ttl, int approx_size);
int overlay_interface_args(const char *arg);
int overlay_rhizome_add_advertisements(int interface_number,struct overlay_buffer *e);

View File

@ -32,7 +32,6 @@ SERVAL_SOURCES = $(SERVAL_BASE)audiodevices.c \
$(SERVAL_BASE)overlay_packetformats.c \
$(SERVAL_BASE)overlay_payload.c \
$(SERVAL_BASE)overlay_route.c \
$(SERVAL_BASE)packetformats.c \
$(SERVAL_BASE)performance_timing.c \
$(SERVAL_BASE)randombytes.c \
$(SERVAL_BASE)rhizome.c \