mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-02-02 19:41:06 +02:00
ead: allow the client to override the source ip of the server, so that it can work with route filtering properly
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13883 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
67f1074730
commit
555b1af398
@ -44,6 +44,9 @@ static uint16_t nid = 0xffff;
|
|||||||
struct sockaddr_in local, remote;
|
struct sockaddr_in local, remote;
|
||||||
static int s = 0;
|
static int s = 0;
|
||||||
static int sockflags;
|
static int sockflags;
|
||||||
|
static struct in_addr serverip = {
|
||||||
|
.s_addr = 0x01010101 /* dummy */
|
||||||
|
};
|
||||||
|
|
||||||
static unsigned char *skey = NULL;
|
static unsigned char *skey = NULL;
|
||||||
static unsigned char bbuf[MAXPARAMLEN];
|
static unsigned char bbuf[MAXPARAMLEN];
|
||||||
@ -80,6 +83,7 @@ send_packet(int type, bool (*handler)(void), unsigned int max)
|
|||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
type = htonl(type);
|
type = htonl(type);
|
||||||
|
memcpy(&msg->ip, &serverip.s_addr, sizeof(msg->ip));
|
||||||
set_nonblock(0);
|
set_nonblock(0);
|
||||||
sendto(s, msgbuf, sizeof(struct ead_msg) + ntohl(msg->len), 0, (struct sockaddr *) &remote, sizeof(remote));
|
sendto(s, msgbuf, sizeof(struct ead_msg) + ntohl(msg->len), 0, (struct sockaddr *) &remote, sizeof(remote));
|
||||||
set_nonblock(1);
|
set_nonblock(1);
|
||||||
@ -294,8 +298,9 @@ send_command(const char *command)
|
|||||||
static int
|
static int
|
||||||
usage(const char *prog)
|
usage(const char *prog)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s [-b <addr>] <node> <username>[:<password>] <command>\n"
|
fprintf(stderr, "Usage: %s [-s <addr>] [-b <addr>] <node> <username>[:<password>] <command>\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
"\t-s <addr>: Set the server's source address to <addr>\n"
|
||||||
"\t-b <addr>: Set the broadcast address to <addr>\n"
|
"\t-b <addr>: Set the broadcast address to <addr>\n"
|
||||||
"\t<node>: Node ID (4 digits hex)\n"
|
"\t<node>: Node ID (4 digits hex)\n"
|
||||||
"\t<username>: Username to authenticate with\n"
|
"\t<username>: Username to authenticate with\n"
|
||||||
@ -328,11 +333,16 @@ int main(int argc, char **argv)
|
|||||||
local.sin_addr.s_addr = INADDR_ANY;
|
local.sin_addr.s_addr = INADDR_ANY;
|
||||||
local.sin_port = 0;
|
local.sin_port = 0;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "b:")) != -1) {
|
while ((ch = getopt(argc, argv, "b:s:h")) != -1) {
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
|
case 's':
|
||||||
|
inet_aton(optarg, &serverip);
|
||||||
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
inet_aton(optarg, &remote.sin_addr);
|
inet_aton(optarg, &remote.sin_addr);
|
||||||
break;
|
break;
|
||||||
|
case 'h':
|
||||||
|
return usage(prog);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
@ -250,7 +250,7 @@ ead_send_packet_clone(struct ead_packet *pkt)
|
|||||||
len = sizeof(struct ead_packet) - sizeof(struct ether_header) + ntohl(pktbuf->msg.len);
|
len = sizeof(struct ead_packet) - sizeof(struct ether_header) + ntohl(pktbuf->msg.len);
|
||||||
pktbuf->len[0] = len >> 8;
|
pktbuf->len[0] = len >> 8;
|
||||||
pktbuf->len[1] = len & 0xff;
|
pktbuf->len[1] = len & 0xff;
|
||||||
memcpy(pktbuf->srcipaddr, pkt->destipaddr, 4);
|
memcpy(pktbuf->srcipaddr, &pkt->msg.ip, 4);
|
||||||
memcpy(pktbuf->destipaddr, pkt->srcipaddr, 4);
|
memcpy(pktbuf->destipaddr, pkt->srcipaddr, 4);
|
||||||
|
|
||||||
/* ip checksum */
|
/* ip checksum */
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#ifndef __EAD_H
|
#ifndef __EAD_H
|
||||||
#define __EAD_H
|
#define __EAD_H
|
||||||
|
|
||||||
#define EAD_DEBUGLEVEL 2
|
#define EAD_DEBUGLEVEL 1
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
@ -120,6 +120,7 @@ struct ead_msg {
|
|||||||
uint32_t type;
|
uint32_t type;
|
||||||
uint16_t nid; /* node id */
|
uint16_t nid; /* node id */
|
||||||
uint16_t tid; /* transaction id */
|
uint16_t tid; /* transaction id */
|
||||||
|
uint32_t ip; /* source ip for responses from the server */
|
||||||
union {
|
union {
|
||||||
struct ead_msg_pong pong;
|
struct ead_msg_pong pong;
|
||||||
struct ead_msg_user user;
|
struct ead_msg_user user;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user