Posted by Oliver Kern on October 03, 2002 at 19:26:10:
In Reply to: TNN 1.78a Linux und dyndns.org posted by Daniel Parthey on September 16, 2002 at 02:27:17:
: Ich nutze die aktuelle Version TheNetNode 1.78a unter Linux.
: Meine AX25IP Linkpartner ohne feste IP-Adresse haben Dynamische
: IP-Adressen bei dyndns.org. Diese muss hin und wieder aufgeloest werden.
: TheNetNode aktualisiert jedoch die Routing-Tabelle nur beim Programmstart.
: Aendert jetzt ein Node seine IP-Adresse aufgrund neuer Interneteinwahl,
: steht in meiner TNN-AX25IP-Routing-Tabelle immer noch die alte IP-Adresse
: (von seiner vorherigen Online-Sitzung) und die Aenderung der IP-Adresse,
: die sich hinter noderufzeichen.dyndns.org verbirgt, wird nicht erkannt.
: Deshalb bricht der Link zu dieser Station zusammen, weil alle gesendeten
: UDP Pakete an die falsche (alte) IP-Adresse - und damit verloren - gehen.
: Ich habe einen Quick 'n' Dirty Hack programmiert, der fuer mich
: funktioniert, aber ich wuerde mich freuen, wenn ein Updater fuer mich
: funktioniert, aber ich wuerde mich freuen, wenn ein Updater fuer
: dynamisches DNS in einer der naechsten Versionen von TheNetNode integriert
: waere.
: Moeglich waere ja eine regelmaessige Ueberpruefung der im Routing
: eingetragenen IP-Adressen anhand der DNS-Hostnamen und einen entsprechende
: Anpassung der AX25IP-Routingtabelle.
: Mit freundlichen Gruessen,
: Daniel Parthey
Hallo Daniel,
füge folgende Zeilen in die AX25IP.C ein:
int ax25ip_config_read(void)
{
FILE *cf;
char buf[256], cbuf[256];
int errflag = 0;
int e = 0;
int lineno = 0;
char cfgfile[256];
route_del();
route_tbl_top = 0;
strcpy(cfgfile, confpath);
strcat(cfgfile, CONFIG_FILE);
if ((cf = fopen(cfgfile, "r")) == NULL)
{
#ifdef INIPATH
strcpy(cfgfile, INIPATH);
strcat(cfgfile, CONFIG_FILE);
if ((cf = fopen(cfgfile, "r")) == NULL)
{
#endif
xprintf("Config file %s not found or could not be opened\n",
CONFIG_FILE);
return(FALSE);
#ifdef INIPATH
}
#endif
}
while (fgets(buf, 255, cf) != NULL) {
(void)strcpy(cbuf, buf);
lineno++;
if ((e = ax25ip_parse_line(buf)) 0) my_udp = htons(i);
}
}
else return(-9);
return(0);
}
else if (strcmp(p, "socketoption") == 0)
{
q = strtok(NULL, " \t\n\r");
if (q == NULL)
return(-1);
if (strcmp(q, "SO_KEEPALIVE") == 0)
{
sockopt_keepalive = TRUE;
}
else if (strcmp(q, "IPTOS_THROUGHPUT") == 0)
{
sockopt_throughput = TRUE;
}
else return(-9);
return(0);
} else if (strcmp(p, "loglevel") == 0) {
q = strtok(NULL, " \t\n\r");
if (q == NULL) return(-1);
loglevel = atoi(q);
return(0);
} else if (strcmp(p, "route") == 0) {
uport = 0;
dfalt = 0;
q = strtok(NULL, " \t\n\r");
if (q == NULL) return(-1);
if (strcmp(q, "default") == 0) dfalt = 1;
else {
if (a_to_call(q, tcall) != 0) return(-2);
}
q = strtok(NULL, " \t\n\r");
if (q == NULL) return(-1);
he = gethostbyname(q);
if (he != NULL) {
memcpy(tip, he->h_addr_list[0], 4);
} else {
j = inet_addr(q);
if (j == -1) return(-5);
memcpy(tip, (char *)&j, 4);
}
q = strtok(NULL, " \t\n\r");
if (q != NULL) {
if (strcmp(q, "udp") == 0) {
uport = DEFAULT_UDP_PORT;
q = strtok(NULL, " \t\n\r");
if (q != NULL) {
i = atoi(q);
if (i > 0) uport = i;
}
}
}
route_add(tip, tcall, uport, dfalt); //route wird hier neu eingetragen
return(0);
}
return(-999);
}
static void route_del(void)
{
route_tbl_top--;
}
füge folgende Zeilen in die L7TIME.C ein, unter die funktion:
void timesrv(void)
{
static LONG Time100 = 0L;
dann folgendes einfügen UNTER
Time--10;:
if (Time100 <= 0L)
{
Time100 = 60; //aller 60 sec. wird die ax25ip_config_read();//funktion ax25ip_config_read
} //eingelesen, routen gelöscht
Time100--; //Routing-Tabelle auf 0 ge-
//setzt, Routen werden wieder
// neu eingelesen bzw. in die
// interne Routing-Tabelle
// abgespeichert
Viel Spass beim Basteln, wenn noch fragen
eMail daa531@gmx.de.
Viele Grüsse aus Glaubitz/Riesa, 73 de daa531 Olli.