From: Bernard Pidoux <bernard.pidoux@upmc.fr>
To: Thomas Osterried <thomas@x-berg.in-berlin.de>
Cc: linux-hams@vger.kernel.org,
Ralf Baechle DL5RB <ralf@linux-mips.org>,
ax25@x-berg.in-berlin.de
Subject: Re: [PATCH] ax25ipd : added provision for dynamic dns hosts
Date: Fri, 06 Nov 2009 23:43:44 +0100 [thread overview]
Message-ID: <4AF4A6A0.9090707@upmc.fr> (raw)
In-Reply-To: <4AF03451.9030505@free.fr>
[-- Attachment #1: Type: text/plain, Size: 1124 bytes --]
Hi All,
I resend the complete ax25ipd patch, taking into account Thomas remarks
about fixed array values.
However sizeof() was not appropriate and I put strnlen() instead.
73 de Bernard, f6bvp
Pidoux wrote :
> Hi Thomas,
>
> You are absolutely right.
> There was a part of the code missing in io.c patch.
> I have just sent a patch including the call to update_dns().
>
> I agree with you about the use of sizeof() instead of a fixed value.
>
> I removed exit() when the progam detects an UDP failure for it aborts
> unecessarily ax25ipd daemon.
>
> UDP socket could not be set when remote station is not on line at the time
> ax25ipd tries to resolve a dynamic IP address.
> This is usually corrected by a later call to update_dns().
>
> 73 de Bernard, f6bvp
>
>
>
> Thomas Osterried wrote :
>> Hello Bernard,
>>
>> On 2009-10-23 15:06:52 +0200, Bernard Pidoux <bernard.pidoux@upmc.fr>
>> wrote in <4AE1AA6C.9040500@upmc.fr>:
...
>>
>> You're right. I admit I was not very happy about the code. I remember I
>> tried to minimize unnecessary DNS requests, but I did not like my
>> solution
>> neither.
>>
[-- Attachment #2: ax25ipd-0.0.8-rc2.new.patch --]
[-- Type: text/plain, Size: 7043 bytes --]
diff -ruN ax25-apps-0.0.8-rc2/ax25ipd/ax25ipd.h ax25-apps-0.0.8-rc2-new/ax25ipd/ax25ipd.h
--- ax25-apps-0.0.8-rc2/ax25ipd/ax25ipd.h 2009-06-14 10:11:48.000000000 +0200
+++ ax25-apps-0.0.8-rc2-new/ax25ipd/ax25ipd.h 2009-11-03 15:31:33.178816102 +0100
@@ -25,6 +25,10 @@
* Terry Dawson, VK2KTJ, September 2001.
*/
+/*
+* added provision for dynamic dns hosts
+ Steve Fraser vk5asf, June 2005
+*/
/* Define the current version number
*
* The first digit represents the major release (0 is a prototype release)
@@ -133,12 +137,13 @@
/* routing.c */
void route_init(void);
-void route_add(unsigned char *, unsigned char *, int, unsigned int);
+void route_add(unsigned char *, unsigned char *, unsigned char *, int, unsigned int);
void bcast_add(unsigned char *);
unsigned char *call_to_ip(unsigned char *);
int is_call_bcast(unsigned char *);
void send_broadcast(unsigned char *, int);
void dump_routes(void);
+void update_dns(void);
/* config.c */
void config_init(void);
diff -ruN ax25-apps-0.0.8-rc2/ax25ipd/config.c ax25-apps-0.0.8-rc2-new/ax25ipd/config.c
--- ax25-apps-0.0.8-rc2/ax25ipd/config.c 2009-06-14 10:07:11.000000000 +0200
+++ ax25-apps-0.0.8-rc2-new/ax25ipd/config.c 2009-11-06 23:28:00.062795762 +0100
@@ -154,7 +154,7 @@
int parse_line(char *buf)
{
char *p, *q;
- unsigned char tcall[7], tip[4];
+ unsigned char tcall[7], tip[4], thost [256];
struct hostent *he;
int i, j, uport;
unsigned int flags;
@@ -212,8 +212,7 @@
q = strtok(NULL, " \t\n\r");
if (q == NULL)
return -1;
- strncpy(ttydevice, q, sizeof(ttydevice)-1);
- ttydevice[sizeof(ttydevice)-1] = 0;
+ strcpy(ttydevice, q);
return 0;
} else if (strcmp(p, "mode") == 0) {
@@ -280,8 +279,7 @@
if (strlen(q) > sizeof(bc_text))
return -7;
q[strlen(q) - 1] = '\0';
- strncpy(bc_text, q, sizeof(bc_text)-1);
- bc_text[sizeof(bc_text)-1] = 0;
+ strcpy(bc_text, q);
return 0;
} else if (strcmp(p, "loglevel") == 0) {
@@ -305,14 +303,20 @@
q = strtok(NULL, " \t\n\r");
if (q == NULL)
return -1;
- he = gethostbyname(q);
- if (he != NULL) {
+
+ j = inet_addr(q);
+ if (j != -1) {
+ memcpy(tip, (char *) &j, 4);
+ thost[0]=0;
+ } else {
+ he = gethostbyname(q);
+ if (he != NULL){
memcpy(tip, he->h_addr_list[0], 4);
- } else { /* maybe user specified a numeric addr? */
- j = inet_addr(q);
- if (j == -1)
- return -5; /* if -1, bad deal! */
- memcpy(tip, (char *) &j, 4);
+ strncpy(thost, q, strlen(q));
+ thost[strlen(q)] = 0;
+ } else {
+ fprintf(stderr,"ax25ipd: %s host IP address unknown - will probe it again later\n",q);
+ }
}
while ((q = strtok(NULL, " \t\n\r")) != NULL) {
@@ -336,7 +340,7 @@
}
}
}
- route_add(tip, tcall, uport, flags);
+ route_add(thost,tip, tcall, uport, flags);
return 0;
} else if (strcmp(p, "broadcast") == 0) {
diff -ruN ax25-apps-0.0.8-rc2/ax25ipd/io.c ax25-apps-0.0.8-rc2-new/ax25ipd/io.c
--- ax25-apps-0.0.8-rc2/ax25ipd/io.c 2009-06-14 17:42:11.000000000 +0200
+++ ax25-apps-0.0.8-rc2-new/ax25ipd/io.c 2009-11-03 15:31:33.178816102 +0100
@@ -15,7 +15,6 @@
#include <sys/types.h>
#include <sys/time.h>
-#include <time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
@@ -67,8 +66,7 @@
struct sockaddr_in from;
socklen_t fromlen;
-time_t last_bc_time;
-
+time_t last_bc_time, last_dns_time;
int ttyfd_bpq = 0;
/*
@@ -134,6 +132,8 @@
bzero((char *) &udpbind, sizeof(struct sockaddr));
udpbind.sin_family = AF_INET;
+
+ last_dns_time = time(NULL);
}
/*
@@ -378,9 +378,19 @@
if (nb == 0) {
fflush(stdout);
fflush(stderr);
+/* do we need to check hostname->ip mappings? */
+ if (time(NULL) > last_dns_time + 300) {
+ update_dns();
+ last_dns_time = time(NULL);
+ }
/* just so we go back to the top of the loop! */
continue;
}
+/* just in case we've been too busy......... */
+ if (time(NULL) > last_dns_time + 900) {
+ update_dns();
+ last_dns_time = time(NULL);
+ }
if (FD_ISSET(ttyfd, &readfds)) {
do {
@@ -599,8 +609,9 @@
perror("reading from raw ip socket");
exit(2);
} else if (mode == UDP_MODE) {
- perror("reading from udp socket");
+/* perror("reading from udp socket");
exit(2);
+*/
} else if (mode == TTY_MODE) {
perror("reading from tty device");
exit(2);
@@ -645,8 +656,9 @@
usleep(100000); /* sleep a bit */
return 1; /* and retry */
}
- perror("writing to udp socket");
+/* perror("writing to udp socket");
exit(2);
+*/
} else if (mode == TTY_MODE) {
if (errno == EWOULDBLOCK) {
LOGL4("write to tty would block, sleeping and retrying!\n");
diff -ruN ax25-apps-0.0.8-rc2/ax25ipd/routing.c ax25-apps-0.0.8-rc2-new/ax25ipd/routing.c
--- ax25-apps-0.0.8-rc2/ax25ipd/routing.c 2009-06-14 10:07:11.000000000 +0200
+++ ax25-apps-0.0.8-rc2-new/ax25ipd/routing.c 2009-11-06 23:28:53.082799117 +0100
@@ -10,8 +10,11 @@
#include "ax25ipd.h"
#include <sys/types.h>
#include <netinet/in.h>
+#include <sys/socket.h>
+#include <netdb.h>
#include <memory.h>
#include <syslog.h>
+#include <string.h>
/* The routing table structure is not visible outside this module. */
@@ -23,6 +26,7 @@
unsigned char pad1;
unsigned char pad2;
unsigned int flags; /* route flags */
+ unsigned char hostnm[256]; /* host name or null */
struct route_table_entry *next;
};
@@ -47,7 +51,7 @@
}
/* Add a new route entry */
-void route_add(unsigned char *ip, unsigned char *call, int udpport,
+void route_add(unsigned char *host, unsigned char *ip, unsigned char *call, int udpport,
unsigned int flags)
{
struct route_table_entry *rl, *rn;
@@ -75,6 +79,7 @@
rn->callsign[i] = call[i] & 0xfe;
rn->callsign[6] = (call[6] & 0x1e) | 0x60;
rn->padcall = 0;
+ strncpy(rn->hostnm, host, strlen(host));
memcpy(rn->ip_addr, ip, 4);
rn->udp_port = htons(udpport);
rn->pad1 = 0;
@@ -242,12 +247,30 @@
rp = route_tbl;
while (rp) {
- LOGL1(" %s\t%s\t%s\t%d\t%d\n",
+ LOGL1(" %s %s %s %d %d %s\n",
call_to_a(rp->callsign),
(char *) inet_ntoa(*(struct in_addr *) rp->ip_addr),
rp->udp_port ? "udp" : "ip",
- ntohs(rp->udp_port), rp->flags);
+ ntohs(rp->udp_port), rp->flags,
+ rp->hostnm);
rp = rp->next;
}
fflush(stdout);
}
+/*update DNS entries of routes */
+void update_dns(void)
+{
+ struct hostent *he;
+ struct route_table_entry *rp;
+
+ rp = route_tbl;
+ while (rp) {
+ if (strlen(rp->hostnm) > 0) {
+ he = gethostbyname(rp->hostnm);
+ if (he != NULL) {
+ memcpy(rp->ip_addr, he->h_addr_list[0], 4);
+ }
+ }
+ rp = rp->next;
+ }
+}
next prev parent reply other threads:[~2009-11-06 22:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-26 17:31 ax25-apps/-tools: clarification about the project status IT2 Stuart Blake Tener, USNR
2009-10-23 13:06 ` [PATCH] ax25ipd : added provision for dynamic dns hosts Bernard Pidoux
2009-11-02 17:22 ` Thomas Osterried
2009-11-03 13:46 ` Pidoux
2009-11-06 22:43 ` Bernard Pidoux [this message]
2009-11-03 13:33 ` Bernard Pidoux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AF4A6A0.9090707@upmc.fr \
--to=bernard.pidoux@upmc.fr \
--cc=ax25@x-berg.in-berlin.de \
--cc=linux-hams@vger.kernel.org \
--cc=ralf@linux-mips.org \
--cc=thomas@x-berg.in-berlin.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox