[Bernd, sehe patch fur 'mix' for net-tools's netstat unten] Benedikt Stockebrand wrote: [..]
>> Da sind zwei losungen: >> - netstat IPv6-compat aware machen >> - kernel dieser port seperat im /proc/net/tcp listen lassen. > > das sind leider beides nicht gerade Kleinigkeiten, die man mal eben in > der Mittagspause implementiert. Aber doch, ich hatte jetzt einer missbraucht dafür ;) "netstat -anpA inet" will also include IPv6 ANY + COMPAT + MAPPED addresses. Adding "--nomix" will return behaviour to the default one. Der Kernel version ist besser IMHO. Und mapped/compat ganz draus ist die totaler Losung imho ;) Für net-tools patch gegen heutige debian version, sehe unten. [..] >> Im meiner optik war es einmal einer guter sache um die IPv4 compat >> addresses zu haben aber mit heutigen software die auf mehrere porten >> binden kann ist das nicht notig mehr. Es ware gut wann man das ganz im >> kernel aus konnte setzen. > > Das sehe ich etwas anders. Wenn ich die IPv4-mapped IPv6 Addresses > benutze, kann ich einen Server so bauen, dass er prinzipiell > unabhängig von der IP-Version immer funktioniert. Du meinst einer bei welcher du nicht nach die Adressen guckt. Jeder Programm das die Versionen an die Anwender durchgebt hat hier ein Problem. Sicher das problem was du oben beschreibt. Wie kann man bzw. einer Server allein IPv6 reden lassen? Clients brauchen immer AF-independent programmiert zu werden. > Das funktioniert > dann prinzipiell auch über IPv6 hinaus, so dass für ein späteres IPv8 > Programme möglicherweise nicht mehr angepasst werden müssen. Sicher, > ich kann mit select(2) auch auf zwei separaten Sockets hören, aber das > ist zusätzlicher Aufwand, den man sich gerne ersparen will. Wann man ein Programm gut programmiert ist das ganz kein Problem, sehe: http://gsyc.escet.urjc.es/~eva/IPv6-web/ipv6.html - Cut & Paste(tm) Meistens wann man einer Programm macht wollt man auch mit mehrere Clients reden, man muss dann eigentlich bereits all select() oder ähnliche Techniken verwenden. Ich mache alle neuer Programmen mit das so das ich dann future-proof bin ;) IPv8 (PIP *) hat übrigens keiner solche Funktionalität. Greets, Jeroen * = http://www.iana.org/assignments/version-numbers
--- netstat.c 2005-12-28 13:11:42.000000000 +0100
+++ net-tools-1.60/netstat.c 2005-12-28 13:12:14.000000000 +0100
@@ -15,7 +15,6 @@
* Bernd Eckenfels, <[EMAIL PROTECTED]>
* Phil Blundell <[EMAIL PROTECTED]>
* Tuan Hoang <[EMAIL PROTECTED]>
- * Jeroen Massar <[EMAIL PROTECTED]>
*
* Tuned for NET3 by:
* Alan Cox, <[EMAIL PROTECTED]>
@@ -58,15 +57,8 @@
* Tuan Hoang added IGMP support for IPv4 and IPv6
*
*990420 {1.38} Tuan Hoang removed a useless assignment from
igmp_do_one()
- *
*20010404 {1.39} Arnaldo Carvalho de Melo - use setlocale
*
- *???????? {1.40} not logged
- *???????? {1.41} not logged
- *???????? {1.42} not logged
- *
- *20051228 {1.43} Jeroen Massar Display IPv6 Compat/Mapped when asking
for IPv4.
- * Use
* 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
@@ -130,7 +122,7 @@
#define FEATURE_NETSTAT
#include "lib/net-features.h"
-char *Release = RELEASE, *Version = "netstat 1.43 (2005-12-28)", *Signature =
"Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Jeroen
Massar and others";
+char *Release = RELEASE, *Version = "netstat 1.42 (2001-04-15)", *Signature =
"Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang and
others";
#define E_READ -1
@@ -157,7 +149,6 @@
int flag_prg = 0;
int flag_arg = 0;
int flag_ver = 0;
-int flag_mix = 0;
FILE *procinfo;
@@ -175,24 +166,24 @@
} else { \
do { \
if (fgets(buffer, sizeof(buffer), procinfo)) \
- (proc)(lnr++, buffer, 0); \
+ (proc)(lnr++, buffer); \
} while (!feof(procinfo)); \
fclose(procinfo); \
}
#if HAVE_AFINET6
-#define INFO_GUTS2(file,proc,mapped) \
+#define INFO_GUTS2(file,proc) \
lnr = 0; \
procinfo = fopen((file), "r"); \
if (procinfo != NULL) { \
do { \
if (fgets(buffer, sizeof(buffer), procinfo)) \
- (proc)(lnr++, buffer, mapped); \
+ (proc)(lnr++, buffer); \
} while (!feof(procinfo)); \
fclose(procinfo); \
}
#else
-#define INFO_GUTS2(file,proc,mapped)
+#define INFO_GUTS2(file,proc)
#endif
#define INFO_GUTS3 \
@@ -204,12 +195,9 @@
int lnr = 0; \
if (!flag_arg || flag_inet) { \
INFO_GUTS1(file,name,proc) \
- if (flag_arg && !flag_inet6 && !flag_mix) { \
- INFO_GUTS2(file6,proc,1) \
- } \
} \
if (!flag_arg || flag_inet6) { \
- INFO_GUTS2(file6,proc,0) \
+ INFO_GUTS2(file6,proc) \
} \
INFO_GUTS3
@@ -555,7 +543,7 @@
putchar('\n');
}
-static void igmp_do_one(int lnr, const char *line, int mapped)
+static void igmp_do_one(int lnr, const char *line)
{
char mcast_addr[128];
#if HAVE_AFINET6
@@ -716,7 +704,7 @@
igmp_do_one);
}
-static void tcp_do_one(int lnr, const char *line, int mapped)
+static void tcp_do_one(int lnr, const char *line)
{
unsigned long rxq, txq, time_len, retr, inode;
int num, local_port, rem_port, d, state, uid, timer_run, timeout;
@@ -756,17 +744,6 @@
inet6_aftype.input(1, addr6, (struct sockaddr *) &remaddr);
localaddr.sin6_family = AF_INET6;
remaddr.sin6_family = AF_INET6;
-
- /* Only show UNSPEC(local), COMPAT or MAPPED ones */
- if ( mapped == 1 &&
- !IN6_IS_ADDR_UNSPECIFIED(&localaddr.sin6_addr) &&
- !IN6_IS_ADDR_V4MAPPED(&localaddr.sin6_addr) &&
- !IN6_IS_ADDR_V4MAPPED(&remaddr.sin6_addr) &&
- !IN6_IS_ADDR_V4COMPAT(&localaddr.sin6_addr) &&
- !IN6_IS_ADDR_V4COMPAT(&remaddr.sin6_addr))
- {
- return;
- }
#endif
} else {
protname = "tcp";
@@ -856,7 +833,7 @@
tcp_do_one);
}
-static void udp_do_one(int lnr, const char *line, int mapped)
+static void udp_do_one(int lnr, const char *line)
{
char buffer[8192], local_addr[64], rem_addr[64];
char *udp_state, timers[64], more[512];
@@ -999,7 +976,7 @@
udp_do_one);
}
-static void raw_do_one(int lnr, const char *line, int mapped)
+static void raw_do_one(int lnr, const char *line)
{
char buffer[8192], local_addr[64], rem_addr[64];
char timers[64], more[512];
@@ -1130,7 +1107,7 @@
#define HAS_INODE 1
-static void unix_do_one(int nr, const char *line, int mapped)
+static void unix_do_one(int nr, const char *line)
{
static int has = 0;
char path[MAXPATHLEN], ss_flags[32];
@@ -1581,7 +1558,6 @@
{"cache", 0, 0, 'C'},
{"fib", 0, 0, 'F'},
{"groups", 0, 0, 'g'},
- {"nomix", 0, 0, '$'},
{NULL, 0, 0, 0}
};
@@ -1693,9 +1669,6 @@
if (aftrans_opt("unix"))
exit(1);
break;
- case '$':
- flag_mix++;
- break;
case '?':
case 'h':
usage();
signature.asc
Description: OpenPGP digital signature
_______________________________________________ ipv6 mailing list [email protected] http://listserv.uni-muenster.de/mailman/listinfo/ipv6
