[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();

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
ipv6 mailing list
[email protected]
http://listserv.uni-muenster.de/mailman/listinfo/ipv6

Antwort per Email an