mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 09:51:50 +00:00
Hide more information about packet headers
This commit is contained in:
parent
4ca6db34d6
commit
3d14e2f3db
@ -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
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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.");
|
||||
}
|
||||
|
10
serval.h
10
serval.h
@ -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);
|
||||
|
@ -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 \
|
||||
|
Loading…
x
Reference in New Issue
Block a user