netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* IPv6 MIB:ipv6PrefixTable implementation
@ 2003-11-20  0:21 Shirley Ma
  2003-12-02 12:40 ` kuznet
  2003-12-05 21:51 ` [PATCH] IPv6 MIB:ipv6Prefix netlink notification Shirley Ma
  0 siblings, 2 replies; 18+ messages in thread
From: Shirley Ma @ 2003-11-20  0:21 UTC (permalink / raw)
  To: kuznet, netdev; +Cc: xma

Hi, Alexy,

A while ago, we had a discussion about IPv6 Prefix Table implementation. 
I agree with you it's not necessary to process offlink prefix.

In each ipv6PrefixTable, there are 9 objects, which are Ifindex, Type, Prefix, 
Length, Origin(addrconf, manually, dhcp, others), OnLinkFlag, AutonomoueFlag, 
AdvPreferredLiftTime and ValidLifeTime. 

As we know, the routing table has all on-link prefix routes. But only Prefix,
Length, Ifindex are saved in routing table, the rest objects info are not saved
anywhere.

One implementation detail question, do you think I need to save all the other 
Prefix Objects: Type, Origin(addrconf, manually, dhcp, others), OnLinkFlag, 
AutonomoueFlag, AdvPreferredLiftTime and ValidLifeTime in routing table also?
If so, sounds like I add a big structure in each prefix route entry in the routing table.

Thanks
Shirley Ma

IBM Linux Technology Center
=======================



List:     linux-netdev
Subject:  Re: [Issues] Implementation for IPv6 MIB:ipv6PrefixTable
From:     kuznet () ms2 ! inr ! ac ! ru
Date:     2003-10-24 17:59:27

Hello!

> First, do you think it's a good idea to save all prefix objects in routing
> table?

Those which are on-link, of course.


> Second, where is the best location for the off-link prefix, on-link flag 0
> prefix to be saved?

Do you really think off-link prefixes are to be saved? Prefix in use is onlink
by defintion, so just return 1 in these bit and ignore off-link prefixes
completely, they are meaningless, are not they?


> Third, do you think it's a good idea to implement a prefix table/per
> interface in the kernel?

Well, if SNMP is going to be used as a tool to snoop ndisc promiscuously
(which seems to be the case if it shows inforrmation about offlink prefixes),
then it is definitely not a kernel task.

Alexey

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: IPv6 MIB:ipv6PrefixTable implementation
  2003-11-20  0:21 IPv6 MIB:ipv6PrefixTable implementation Shirley Ma
@ 2003-12-02 12:40 ` kuznet
  2003-12-05 20:14   ` [PATCH]snmp6 64-bit counter support in proc.c Shirley Ma
  2003-12-05 21:51 ` [PATCH] IPv6 MIB:ipv6Prefix netlink notification Shirley Ma
  1 sibling, 1 reply; 18+ messages in thread
From: kuznet @ 2003-12-02 12:40 UTC (permalink / raw)
  To: Shirley Ma; +Cc: netdev, xma

Hello!

> One implementation detail question, do you think I need to save all the o=
> ther=20
> Prefix Objects: Type, Origin(addrconf, manually, dhcp, others),

These two things should be stored right now. Existing implementation is
quite a mess, but we definitely want to remember origin of each route
in "protocol" and another flags, they are of common interest.


> AutonomoueFlag, AdvPreferredLiftTime and ValidLifeTime

ValidLifeTime is "expires" on this route.

What's about AdvPreferredLiftTime I am puzzled a little,
preferred time is not an attribute of a prefix at all,
it is attribute of address, is not it? Unless the prefix is used
to install local address it does not make sense, right?

Alexey

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH]snmp6 64-bit counter support in proc.c
  2003-12-02 12:40 ` kuznet
@ 2003-12-05 20:14   ` Shirley Ma
  2003-12-05 20:31     ` David S. Miller
  0 siblings, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2003-12-05 20:14 UTC (permalink / raw)
  To: kuznet; +Cc: netdev, xma

[-- Attachment #1: Type: text/plain, Size: 222 bytes --]

I add this because there are some 64-bit counters in the new IPv6 MIBs. 
This patch has been tested agaist linux-2.6.0-test9, and cleanly applied to 
linux-2.6.0-test11.

Thanks
Shirley Ma
IBM Linux Technology Center

[-- Attachment #2: linux-2.6.0-test11-ipv6mib2-64.patch --]
[-- Type: text/x-diff, Size: 3156 bytes --]

diff -urN linux-2.6.0-test11/net/ipv6/proc.c linux-2.6.0-test11-ipv6mib2-64/net/ipv6/proc.c
--- linux-2.6.0-test11/net/ipv6/proc.c	2003-11-26 12:43:38.000000000 -0800
+++ linux-2.6.0-test11-ipv6mib2-64/net/ipv6/proc.c	2003-12-05 12:04:19.000000000 -0800
@@ -60,13 +60,14 @@
 struct snmp6_item
 {
 	char *name;
+	int   size;
 	int   offset;
 };
-#define SNMP6_SENTINEL	{ .name = NULL, .offset = 0 }
+#define SNMP6_SENTINEL	{ .name = NULL, .size = 0, .offset = 0 }
 
 static struct snmp6_item snmp6_ipv6_list[] = {
 /* ipv6 mib according to RFC 2465 */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct ipv6_mib, x) }
+#define SNMP6_GEN(x) { .name = #x , .size = sizeof(((struct ipv6_mib *)0)->x), .offset = offsetof(struct ipv6_mib, x) }
 	SNMP6_GEN(Ip6InReceives),
 	SNMP6_GEN(Ip6InHdrErrors),
 	SNMP6_GEN(Ip6InTooBigErrors),
@@ -104,7 +105,7 @@
 		OutRouterAdvertisements too.
 		OutGroupMembQueries too.
  */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct icmpv6_mib, x) }
+#define SNMP6_GEN(x) { .name = #x , .size = sizeof(((struct icmpv6_mib *)0)->x), .offset = offsetof(struct icmpv6_mib, x) }
 	SNMP6_GEN(Icmp6InMsgs),
 	SNMP6_GEN(Icmp6InErrors),
 	SNMP6_GEN(Icmp6InDestUnreachs),
@@ -138,7 +139,7 @@
 };
 
 static struct snmp6_item snmp6_udp6_list[] = {
-#define SNMP6_GEN(x) { .name = "Udp6" #x , .offset = offsetof(struct udp_mib, Udp##x) }
+#define SNMP6_GEN(x) { .name = "Udp6" #x , .size = sizeof(((struct udp_mib *)0)->Udp##x), .offset = offsetof(struct udp_mib, Udp##x) }
 	SNMP6_GEN(InDatagrams),
 	SNMP6_GEN(NoPorts),
 	SNMP6_GEN(InErrors),
@@ -147,22 +148,27 @@
 	SNMP6_SENTINEL
 };
 
-static unsigned long
-fold_field(void *mib[], int offt)
+static unsigned long long
+fold_field(void *mib[], int size, int offt)
 {
-        unsigned long res = 0;
+        unsigned long long res = 0;
         int i;
  
         for (i = 0; i < NR_CPUS; i++) {
                 if (!cpu_possible(i))
                         continue;
-                res +=
-                    *((unsigned long *) (((void *)per_cpu_ptr(mib[0], i)) +
-                                         offt));
-                res +=
-                    *((unsigned long *) (((void *)per_cpu_ptr(mib[1], i)) +
-                                         offt));
-        }
+		if (size == 4) {
+			res += *((unsigned long *) 
+				(((void *)per_cpu_ptr(mib[0], i)) + offt));
+			res += *((unsigned long *)
+				(((void *)per_cpu_ptr(mib[1], i)) + offt));
+		} else if (size == 8) {
+			res += *((unsigned long long *) 
+				(((void *)per_cpu_ptr(mib[0], i)) + offt));
+			res += *((unsigned long long *)
+				(((void *)per_cpu_ptr(mib[1], i)) + offt));
+		}
+	}
         return res;
 }
 
@@ -170,9 +176,9 @@
 snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp6_item *itemlist)
 {
 	int i;
-	for (i=0; itemlist[i].name; i++)
-		seq_printf(seq, "%-32s\t%lu\n", itemlist[i].name, 
-				fold_field(mib, itemlist[i].offset));
+	for (i=0; itemlist[i].name; i++) 
+		seq_printf(seq, "%-32s\t%llu\n", itemlist[i].name, 
+			fold_field(mib, itemlist[i].size, itemlist[i].offset));
 }
 
 static int snmp6_seq_show(struct seq_file *seq, void *v)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH]snmp6 64-bit counter support in proc.c
  2003-12-05 20:14   ` [PATCH]snmp6 64-bit counter support in proc.c Shirley Ma
@ 2003-12-05 20:31     ` David S. Miller
  2004-01-14 22:52       ` Shirley Ma
  0 siblings, 1 reply; 18+ messages in thread
From: David S. Miller @ 2003-12-05 20:31 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Fri, 5 Dec 2003 12:14:47 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> I add this because there are some 64-bit counters in the new IPv6 MIBs. 
> This patch has been tested agaist linux-2.6.0-test9, and cleanly applied to 
> linux-2.6.0-test11.

"sizeof(unsigned long)" evaluates to 8 on 64-bit systems,
yet you assume it always evaluated to 4 as on 32-bit systems.

Maybe it would be wiser to explicitly use 'u32' and 'u64' for
the types of the snmp counters?

This has always been a sore area.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] IPv6 MIB:ipv6Prefix netlink notification
  2003-11-20  0:21 IPv6 MIB:ipv6PrefixTable implementation Shirley Ma
  2003-12-02 12:40 ` kuznet
@ 2003-12-05 21:51 ` Shirley Ma
  2003-12-05 22:57   ` David S. Miller
  1 sibling, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2003-12-05 21:51 UTC (permalink / raw)
  To: kuznet, netdev; +Cc: xma

[-- Attachment #1: Type: text/plain, Size: 224 bytes --]

Once receiving a router advertisement message for prefix info, 
a netlink notification event will be created.

This patch has been tested against linux-2.6.0-test11. 

Thanks
Shirley Ma
IBM Linux Technology Center


[-- Attachment #2: linux-2.6.0-test11-ipv6mib3.patch --]
[-- Type: text/x-diff, Size: 4590 bytes --]

diff -urN linux-2.6.0-test11/include/linux/rtnetlink.h linux-2.6.0-test11-ipv6mib3/include/linux/rtnetlink.h
--- linux-2.6.0-test11/include/linux/rtnetlink.h	2003-11-26 12:45:11.000000000 -0800
+++ linux-2.6.0-test11-ipv6mib3/include/linux/rtnetlink.h	2003-12-05 12:20:11.000000000 -0800
@@ -44,7 +44,10 @@
 #define	RTM_DELTFILTER	(RTM_BASE+29)
 #define	RTM_GETTFILTER	(RTM_BASE+30)
 
-#define	RTM_MAX		(RTM_BASE+31)
+#define RTM_NEWPREFIX	(RTM_BASE+36)
+#define RTM_GETPREFIX	(RTM_BASE+38)
+
+#define	RTM_MAX		(RTM_BASE+39)
 
 /* 
    Generic structure for encapsulation of optional route information.
@@ -458,6 +461,34 @@
 	unsigned	ifi_change;		/* IFF_* change mask */
 };
 
+/********************************************************************
+ *		prefix information 
+ ****/
+
+struct prefixmsg
+{
+	unsigned char	prefix_family;
+	int		prefix_ifindex;
+	unsigned char	prefix_type;
+	unsigned char	prefix_len;
+	unsigned char	prefix_flags;
+};
+
+enum 
+{
+	PREFIX_UNSPEC,
+	PREFIX_ADDRESS,
+	PREFIX_CACHEINFO,
+};
+
+#define PREFIX_MAX	PREFIX_CACHEINFO
+
+struct prefix_cacheinfo
+{
+	__u32	preferred_time;
+	__u32	valid_time;
+};
+
 /* The struct should be in sync with struct net_device_stats */
 struct rtnl_link_stats
 {
@@ -614,6 +645,8 @@
 #define RTMGRP_DECnet_IFADDR    0x1000
 #define RTMGRP_DECnet_ROUTE     0x4000
 
+#define RTMGRP_IPV6_PREFIX	0x20000
+
 /* End of information exported to user level */
 
 #ifdef __KERNEL__
diff -urN linux-2.6.0-test11/include/net/if_inet6.h linux-2.6.0-test11-ipv6mib3/include/net/if_inet6.h
--- linux-2.6.0-test11/include/net/if_inet6.h	2003-11-26 12:45:45.000000000 -0800
+++ linux-2.6.0-test11-ipv6mib3/include/net/if_inet6.h	2003-12-05 12:20:11.000000000 -0800
@@ -25,6 +25,10 @@
 #define IF_RA_RCVD	0x20
 #define IF_RS_SENT	0x10
 
+/* prefix flags */
+#define IF_PREFIX_ONLINK	0x01
+#define IF_PREFIX_AUTOCONF	0x02
+
 #ifdef __KERNEL__
 
 struct inet6_ifaddr 
diff -urN linux-2.6.0-test11/net/ipv6/addrconf.c linux-2.6.0-test11-ipv6mib3/net/ipv6/addrconf.c
--- linux-2.6.0-test11/net/ipv6/addrconf.c	2003-11-26 12:45:37.000000000 -0800
+++ linux-2.6.0-test11-ipv6mib3/net/ipv6/addrconf.c	2003-12-05 12:21:59.000000000 -0800
@@ -138,6 +138,8 @@
 static void addrconf_rs_timer(unsigned long data);
 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
 
+static void inet6_prefix_notify(int event, struct inet6_dev *idev, 
+				struct prefix_info *pinfo);
 static int ipv6_chk_same_addr(const struct in6_addr *addr, struct net_device *dev);
 
 static struct notifier_block *inet6addr_chain;
@@ -1491,6 +1493,7 @@
 			addrconf_verify(0);
 		}
 	}
+	inet6_prefix_notify(RTM_NEWPREFIX, in6_dev, pinfo);
 	in6_dev_put(in6_dev);
 }
 
@@ -2751,6 +2754,66 @@
 	return skb->len;
 }
 
+static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
+			struct prefix_info *pinfo, u32 pid, u32 seq, int event)
+{
+	struct prefixmsg	*pmsg;
+	struct nlmsghdr 	*nlh;
+	unsigned char		*b = skb->tail;
+	struct prefix_cacheinfo	ci;
+
+	nlh = NLMSG_PUT(skb, pid, seq, event, sizeof(*pmsg));
+	
+	if (pid) 
+		nlh->nlmsg_flags |= NLM_F_MULTI;
+	
+	pmsg = NLMSG_DATA(nlh);
+	pmsg->prefix_family = AF_INET6;
+	pmsg->prefix_ifindex = idev->dev->ifindex;
+	pmsg->prefix_len = pinfo->prefix_len;
+	pmsg->prefix_type = pinfo->type;
+	
+	pmsg->prefix_flags = 0;
+	if (pinfo->onlink)
+		pmsg->prefix_flags |= IF_PREFIX_ONLINK;
+	if (pinfo->autoconf)
+		pmsg->prefix_flags |= IF_PREFIX_AUTOCONF;
+
+	RTA_PUT(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix);
+
+	ci.preferred_time = ntohl(pinfo->prefered);
+	ci.valid_time = ntohl(pinfo->valid);
+	RTA_PUT(skb, PREFIX_CACHEINFO, sizeof(ci), &ci);
+
+	nlh->nlmsg_len = skb->tail - b;
+	return skb->len;
+
+nlmsg_failure:
+rtattr_failure:
+	skb_trim(skb, b - skb->data);
+	return -1;
+}
+
+static void inet6_prefix_notify(int event, struct inet6_dev *idev, 
+			 struct prefix_info *pinfo)
+{
+	struct sk_buff *skb;
+	int size = NLMSG_SPACE(sizeof(struct prefixmsg)+128);
+
+	skb = alloc_skb(size, GFP_ATOMIC);
+	if (!skb) {
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_PREFIX, ENOBUFS);
+		return;
+	}
+	if (inet6_fill_prefix(skb, idev, pinfo, 0, 0, event) < 0) {
+		kfree_skb(skb);
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_PREFIX, EINVAL);
+		return;
+	}
+	NETLINK_CB(skb).dst_groups = RTMGRP_IPV6_PREFIX;
+	netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_PREFIX, GFP_ATOMIC);
+}
+
 static struct rtnetlink_link inet6_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = {
 	[RTM_GETLINK - RTM_BASE] = { .dumpit	= inet6_dump_ifinfo, },
 	[RTM_NEWADDR - RTM_BASE] = { .doit	= inet6_rtm_newaddr, },

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6Prefix netlink notification
  2003-12-05 21:51 ` [PATCH] IPv6 MIB:ipv6Prefix netlink notification Shirley Ma
@ 2003-12-05 22:57   ` David S. Miller
  2004-01-14 22:54     ` Shirley Ma
                       ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: David S. Miller @ 2003-12-05 22:57 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Fri, 5 Dec 2003 13:51:47 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> Once receiving a router advertisement message for prefix info, 
> a netlink notification event will be created.
> 
> This patch has been tested against linux-2.6.0-test11. 

Let's queue this up for 2.6.1, please resend it after 2.6.0 is
released.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH]snmp6 64-bit counter support in proc.c
  2003-12-05 20:31     ` David S. Miller
@ 2004-01-14 22:52       ` Shirley Ma
  2004-01-15  8:57         ` David S. Miller
  0 siblings, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2004-01-14 22:52 UTC (permalink / raw)
  To: David S. Miller; +Cc: kuznet, netdev, xma

[-- Attachment #1: Type: text/plain, Size: 365 bytes --]

> "sizeof(unsigned long)" evaluates to 8 on 64-bit systems,
> yet you assume it always evaluated to 4 as on 32-bit systems.
>
> Maybe it would be wiser to explicitly use 'u32' and 'u64' for
> the types of the snmp counters?
>
> This has always been a sore area.

This is the new patch against 2.6.1 kernel.

Thanks
Shirley Ma
IBM Linux Technology Center

[-- Attachment #2: linux-2.6.1-ipv6mib2-64.patch --]
[-- Type: text/x-diff, Size: 20376 bytes --]

diff -urN linux-2.6.1/include/net/snmp.h linux-2.6.1-ipv6mib2-64/include/net/snmp.h
--- linux-2.6.1/include/net/snmp.h	2004-01-08 22:59:26.000000000 -0800
+++ linux-2.6.1-ipv6mib2-64/include/net/snmp.h	2004-01-13 13:45:23.000000000 -0800
@@ -49,24 +49,24 @@
  */
 struct ip_mib
 {
- 	unsigned long	IpInReceives;
- 	unsigned long	IpInHdrErrors;
- 	unsigned long	IpInAddrErrors;
- 	unsigned long	IpForwDatagrams;
- 	unsigned long	IpInUnknownProtos;
- 	unsigned long	IpInDiscards;
- 	unsigned long	IpInDelivers;
- 	unsigned long	IpOutRequests;
- 	unsigned long	IpOutDiscards;
- 	unsigned long	IpOutNoRoutes;
- 	unsigned long	IpReasmTimeout;
- 	unsigned long	IpReasmReqds;
- 	unsigned long	IpReasmOKs;
- 	unsigned long	IpReasmFails;
- 	unsigned long	IpFragOKs;
- 	unsigned long	IpFragFails;
- 	unsigned long	IpFragCreates;
-	unsigned long   __pad[0]; 
+ 	__u64	IpInReceives;
+ 	__u64	IpInHdrErrors;
+ 	__u64	IpInAddrErrors;
+ 	__u64	IpForwDatagrams;
+ 	__u64	IpInUnknownProtos;
+ 	__u64	IpInDiscards;
+ 	__u64	IpInDelivers;
+ 	__u64	IpOutRequests;
+ 	__u64	IpOutDiscards;
+ 	__u64	IpOutNoRoutes;
+ 	__u64	IpReasmTimeout;
+ 	__u64	IpReasmReqds;
+ 	__u64	IpReasmOKs;
+ 	__u64	IpReasmFails;
+ 	__u64	IpFragOKs;
+ 	__u64	IpFragFails;
+ 	__u64	IpFragCreates;
+	__u64   __pad[0]; 
 };
  
 /*
@@ -74,29 +74,29 @@
  */
 struct ipv6_mib
 {
-	unsigned long	Ip6InReceives;
- 	unsigned long	Ip6InHdrErrors;
- 	unsigned long	Ip6InTooBigErrors;
- 	unsigned long	Ip6InNoRoutes;
- 	unsigned long	Ip6InAddrErrors;
- 	unsigned long	Ip6InUnknownProtos;
- 	unsigned long	Ip6InTruncatedPkts;
- 	unsigned long	Ip6InDiscards;
- 	unsigned long	Ip6InDelivers;
- 	unsigned long	Ip6OutForwDatagrams;
- 	unsigned long	Ip6OutRequests;
- 	unsigned long	Ip6OutDiscards;
- 	unsigned long	Ip6OutNoRoutes;
- 	unsigned long	Ip6ReasmTimeout;
- 	unsigned long	Ip6ReasmReqds;
- 	unsigned long	Ip6ReasmOKs;
- 	unsigned long	Ip6ReasmFails;
- 	unsigned long	Ip6FragOKs;
- 	unsigned long	Ip6FragFails;
- 	unsigned long	Ip6FragCreates;
- 	unsigned long	Ip6InMcastPkts;
- 	unsigned long	Ip6OutMcastPkts;
-	unsigned long   __pad[0]; 
+	__u64	Ip6InReceives;
+ 	__u64	Ip6InHdrErrors;
+ 	__u64	Ip6InTooBigErrors;
+ 	__u64	Ip6InNoRoutes;
+ 	__u64	Ip6InAddrErrors;
+ 	__u64	Ip6InUnknownProtos;
+ 	__u64	Ip6InTruncatedPkts;
+ 	__u64	Ip6InDiscards;
+ 	__u64	Ip6InDelivers;
+ 	__u64	Ip6OutForwDatagrams;
+ 	__u64	Ip6OutRequests;
+ 	__u64	Ip6OutDiscards;
+ 	__u64	Ip6OutNoRoutes;
+ 	__u64	Ip6ReasmTimeout;
+ 	__u64	Ip6ReasmReqds;
+ 	__u64	Ip6ReasmOKs;
+ 	__u64	Ip6ReasmFails;
+ 	__u64	Ip6FragOKs;
+ 	__u64	Ip6FragFails;
+ 	__u64	Ip6FragCreates;
+ 	__u64	Ip6InMcastPkts;
+ 	__u64	Ip6OutMcastPkts;
+	__u64   __pad[0]; 
 };
  
 /*
@@ -105,34 +105,34 @@
  */
 struct icmp_mib
 {
- 	unsigned long	IcmpInMsgs;
- 	unsigned long	IcmpInErrors;
-  	unsigned long	IcmpInDestUnreachs;
- 	unsigned long	IcmpInTimeExcds;
- 	unsigned long	IcmpInParmProbs;
- 	unsigned long	IcmpInSrcQuenchs;
- 	unsigned long	IcmpInRedirects;
- 	unsigned long	IcmpInEchos;
- 	unsigned long	IcmpInEchoReps;
- 	unsigned long	IcmpInTimestamps;
- 	unsigned long	IcmpInTimestampReps;
- 	unsigned long	IcmpInAddrMasks;
- 	unsigned long	IcmpInAddrMaskReps;
- 	unsigned long	IcmpOutMsgs;
- 	unsigned long	IcmpOutErrors;
- 	unsigned long	IcmpOutDestUnreachs;
- 	unsigned long	IcmpOutTimeExcds;
- 	unsigned long	IcmpOutParmProbs;
- 	unsigned long	IcmpOutSrcQuenchs;
- 	unsigned long	IcmpOutRedirects;
- 	unsigned long	IcmpOutEchos;
- 	unsigned long	IcmpOutEchoReps;
- 	unsigned long	IcmpOutTimestamps;
- 	unsigned long	IcmpOutTimestampReps;
- 	unsigned long	IcmpOutAddrMasks;
- 	unsigned long	IcmpOutAddrMaskReps;
-	unsigned long	dummy;
-	unsigned long   __pad[0]; 
+ 	__u64	IcmpInMsgs;
+ 	__u64	IcmpInErrors;
+  	__u64	IcmpInDestUnreachs;
+ 	__u64	IcmpInTimeExcds;
+ 	__u64	IcmpInParmProbs;
+ 	__u64	IcmpInSrcQuenchs;
+ 	__u64	IcmpInRedirects;
+ 	__u64	IcmpInEchos;
+ 	__u64	IcmpInEchoReps;
+ 	__u64	IcmpInTimestamps;
+ 	__u64	IcmpInTimestampReps;
+ 	__u64	IcmpInAddrMasks;
+ 	__u64	IcmpInAddrMaskReps;
+ 	__u64	IcmpOutMsgs;
+ 	__u64	IcmpOutErrors;
+ 	__u64	IcmpOutDestUnreachs;
+ 	__u64	IcmpOutTimeExcds;
+ 	__u64	IcmpOutParmProbs;
+ 	__u64	IcmpOutSrcQuenchs;
+ 	__u64	IcmpOutRedirects;
+ 	__u64	IcmpOutEchos;
+ 	__u64	IcmpOutEchoReps;
+ 	__u64	IcmpOutTimestamps;
+ 	__u64	IcmpOutTimestampReps;
+ 	__u64	IcmpOutAddrMasks;
+ 	__u64	IcmpOutAddrMaskReps;
+	__u64	dummy;
+	__u64	__pad[0]; 
 };
 
 /*
@@ -140,40 +140,35 @@
  */
 struct icmpv6_mib
 {
-	unsigned long	Icmp6InMsgs;
-	unsigned long	Icmp6InErrors;
-
-	unsigned long	Icmp6InDestUnreachs;
-	unsigned long	Icmp6InPktTooBigs;
-	unsigned long	Icmp6InTimeExcds;
-	unsigned long	Icmp6InParmProblems;
-
-	unsigned long	Icmp6InEchos;
-	unsigned long	Icmp6InEchoReplies;
-	unsigned long	Icmp6InGroupMembQueries;
-	unsigned long	Icmp6InGroupMembResponses;
-	unsigned long	Icmp6InGroupMembReductions;
-	unsigned long	Icmp6InRouterSolicits;
-	unsigned long	Icmp6InRouterAdvertisements;
-	unsigned long	Icmp6InNeighborSolicits;
-	unsigned long	Icmp6InNeighborAdvertisements;
-	unsigned long	Icmp6InRedirects;
-
-	unsigned long	Icmp6OutMsgs;
-
-	unsigned long	Icmp6OutDestUnreachs;
-	unsigned long	Icmp6OutPktTooBigs;
-	unsigned long	Icmp6OutTimeExcds;
-	unsigned long	Icmp6OutParmProblems;
-
-	unsigned long	Icmp6OutEchoReplies;
-	unsigned long	Icmp6OutRouterSolicits;
-	unsigned long	Icmp6OutNeighborSolicits;
-	unsigned long	Icmp6OutNeighborAdvertisements;
-	unsigned long	Icmp6OutRedirects;
-	unsigned long	Icmp6OutGroupMembResponses;
-	unsigned long	Icmp6OutGroupMembReductions;
-	unsigned long   __pad[0]; 
+	__u64	Icmp6InMsgs;
+	__u64	Icmp6InErrors;
+	__u64	Icmp6InDestUnreachs;
+	__u64	Icmp6InPktTooBigs;
+	__u64	Icmp6InTimeExcds;
+	__u64	Icmp6InParmProblems;
+	__u64	Icmp6InEchos;
+	__u64	Icmp6InEchoReplies;
+	__u64	Icmp6InGroupMembQueries;
+	__u64	Icmp6InGroupMembResponses;
+	__u64	Icmp6InGroupMembReductions;
+	__u64	Icmp6InRouterSolicits;
+	__u64	Icmp6InRouterAdvertisements;
+	__u64	Icmp6InNeighborSolicits;
+	__u64	Icmp6InNeighborAdvertisements;
+	__u64	Icmp6InRedirects;
+	__u64	Icmp6OutMsgs;
+	__u64	Icmp6OutDestUnreachs;
+	__u64	Icmp6OutPktTooBigs;
+	__u64	Icmp6OutTimeExcds;
+	__u64	Icmp6OutParmProblems;
+	__u64	Icmp6OutEchoReplies;
+	__u64	Icmp6OutRouterSolicits;
+	__u64	Icmp6OutNeighborSolicits;
+	__u64	Icmp6OutNeighborAdvertisements;
+	__u64	Icmp6OutRedirects;
+	__u64	Icmp6OutGroupMembResponses;
+	__u64	Icmp6OutGroupMembReductions;
+	__u64   __pad[0]; 
 };
  
 /*
@@ -182,21 +177,21 @@
  */
 struct tcp_mib
 {
- 	unsigned long	TcpRtoAlgorithm;
- 	unsigned long	TcpRtoMin;
- 	unsigned long	TcpRtoMax;
- 	unsigned long	TcpMaxConn;
- 	unsigned long	TcpActiveOpens;
- 	unsigned long	TcpPassiveOpens;
- 	unsigned long	TcpAttemptFails;
- 	unsigned long	TcpEstabResets;
- 	unsigned long	TcpCurrEstab;
- 	unsigned long	TcpInSegs;
- 	unsigned long	TcpOutSegs;
- 	unsigned long	TcpRetransSegs;
- 	unsigned long	TcpInErrs;
- 	unsigned long	TcpOutRsts;
-	unsigned long   __pad[0]; 
+ 	__u64	TcpRtoAlgorithm;
+ 	__u64	TcpRtoMin;
+ 	__u64	TcpRtoMax;
+ 	__u64	TcpMaxConn;
+ 	__u64	TcpActiveOpens;
+ 	__u64	TcpPassiveOpens;
+ 	__u64	TcpAttemptFails;
+ 	__u64	TcpEstabResets;
+ 	__u64	TcpCurrEstab;
+ 	__u64	TcpInSegs;
+ 	__u64	TcpOutSegs;
+ 	__u64	TcpRetransSegs;
+ 	__u64	TcpInErrs;
+ 	__u64	TcpOutRsts;
+	__u64   __pad[0]; 
 };
  
 /*
@@ -205,110 +200,110 @@
  */
 struct udp_mib
 {
- 	unsigned long	UdpInDatagrams;
- 	unsigned long	UdpNoPorts;
- 	unsigned long	UdpInErrors;
- 	unsigned long	UdpOutDatagrams;
-	unsigned long   __pad[0];
+ 	__u64	UdpInDatagrams;
+ 	__u64	UdpNoPorts;
+ 	__u64	UdpInErrors;
+ 	__u64	UdpOutDatagrams;
+	__u64   __pad[0];
 }; 
 
 /* draft-ietf-sigtran-sctp-mib-07.txt */
 struct sctp_mib
 {
-	unsigned long   SctpCurrEstab;
-	unsigned long   SctpActiveEstabs;
-	unsigned long   SctpPassiveEstabs;
-	unsigned long   SctpAborteds;
-	unsigned long   SctpShutdowns;
-	unsigned long   SctpOutOfBlues;
-	unsigned long   SctpChecksumErrors;
-	unsigned long   SctpOutCtrlChunks;
-	unsigned long   SctpOutOrderChunks;
-	unsigned long   SctpOutUnorderChunks;
-	unsigned long   SctpInCtrlChunks;
-	unsigned long   SctpInOrderChunks;
-	unsigned long   SctpInUnorderChunks;
-	unsigned long   SctpFragUsrMsgs;
-	unsigned long   SctpReasmUsrMsgs;
-	unsigned long   SctpOutSCTPPacks;
-	unsigned long   SctpInSCTPPacks;
-	unsigned long   SctpRtoAlgorithm;
-	unsigned long   SctpRtoMin;
-	unsigned long   SctpRtoMax;
-	unsigned long   SctpRtoInitial;
-	unsigned long   SctpValCookieLife;
-	unsigned long   SctpMaxInitRetr;
-	unsigned long   __pad[0];
+	__u64   SctpCurrEstab;
+	__u64   SctpActiveEstabs;
+	__u64   SctpPassiveEstabs;
+	__u64   SctpAborteds;
+	__u64   SctpShutdowns;
+	__u64   SctpOutOfBlues;
+	__u64   SctpChecksumErrors;
+	__u64   SctpOutCtrlChunks;
+	__u64   SctpOutOrderChunks;
+	__u64   SctpOutUnorderChunks;
+	__u64   SctpInCtrlChunks;
+	__u64   SctpInOrderChunks;
+	__u64   SctpInUnorderChunks;
+	__u64   SctpFragUsrMsgs;
+	__u64   SctpReasmUsrMsgs;
+	__u64   SctpOutSCTPPacks;
+	__u64   SctpInSCTPPacks;
+	__u64   SctpRtoAlgorithm;
+	__u64   SctpRtoMin;
+	__u64   SctpRtoMax;
+	__u64   SctpRtoInitial;
+	__u64   SctpValCookieLife;
+	__u64   SctpMaxInitRetr;
+	__u64   __pad[0];
 };
 
 struct linux_mib 
 {
-	unsigned long	SyncookiesSent;
-	unsigned long	SyncookiesRecv;
-	unsigned long	SyncookiesFailed;
-	unsigned long	EmbryonicRsts;
-	unsigned long	PruneCalled; 
-	unsigned long	RcvPruned;
-	unsigned long	OfoPruned;
-	unsigned long	OutOfWindowIcmps; 
-	unsigned long	LockDroppedIcmps; 
-        unsigned long   ArpFilter;
-	unsigned long	TimeWaited; 
-	unsigned long	TimeWaitRecycled; 
-	unsigned long	TimeWaitKilled; 
-	unsigned long	PAWSPassiveRejected; 
-	unsigned long	PAWSActiveRejected; 
-	unsigned long	PAWSEstabRejected; 
-	unsigned long	DelayedACKs;
-	unsigned long	DelayedACKLocked;
-	unsigned long	DelayedACKLost;
-	unsigned long	ListenOverflows;
-	unsigned long	ListenDrops;
-	unsigned long	TCPPrequeued;
-	unsigned long	TCPDirectCopyFromBacklog;
-	unsigned long	TCPDirectCopyFromPrequeue;
-	unsigned long	TCPPrequeueDropped;
-	unsigned long	TCPHPHits;
-	unsigned long	TCPHPHitsToUser;
-	unsigned long	TCPPureAcks;
-	unsigned long	TCPHPAcks;
-	unsigned long	TCPRenoRecovery;
-	unsigned long	TCPSackRecovery;
-	unsigned long	TCPSACKReneging;
-	unsigned long	TCPFACKReorder;
-	unsigned long	TCPSACKReorder;
-	unsigned long	TCPRenoReorder;
-	unsigned long	TCPTSReorder;
-	unsigned long	TCPFullUndo;
-	unsigned long	TCPPartialUndo;
-	unsigned long	TCPDSACKUndo;
-	unsigned long	TCPLossUndo;
-	unsigned long	TCPLoss;
-	unsigned long	TCPLostRetransmit;
-	unsigned long	TCPRenoFailures;
-	unsigned long	TCPSackFailures;
-	unsigned long	TCPLossFailures;
-	unsigned long	TCPFastRetrans;
-	unsigned long	TCPForwardRetrans;
-	unsigned long	TCPSlowStartRetrans;
-	unsigned long	TCPTimeouts;
-	unsigned long	TCPRenoRecoveryFail;
-	unsigned long	TCPSackRecoveryFail;
-	unsigned long	TCPSchedulerFailed;
-	unsigned long	TCPRcvCollapsed;
-	unsigned long	TCPDSACKOldSent;
-	unsigned long	TCPDSACKOfoSent;
-	unsigned long	TCPDSACKRecv;
-	unsigned long	TCPDSACKOfoRecv;
-	unsigned long	TCPAbortOnSyn;
-	unsigned long	TCPAbortOnData;
-	unsigned long	TCPAbortOnClose;
-	unsigned long	TCPAbortOnMemory;
-	unsigned long	TCPAbortOnTimeout;
-	unsigned long	TCPAbortOnLinger;
-	unsigned long	TCPAbortFailed;
-	unsigned long	TCPMemoryPressures;
-	unsigned long   __pad[0];
+	__u64	SyncookiesSent;
+	__u64	SyncookiesRecv;
+	__u64	SyncookiesFailed;
+	__u64	EmbryonicRsts;
+	__u64	PruneCalled; 
+	__u64	RcvPruned;
+	__u64	OfoPruned;
+	__u64	OutOfWindowIcmps; 
+	__u64	LockDroppedIcmps; 
+	__u64   ArpFilter;
+	__u64	TimeWaited; 
+	__u64	TimeWaitRecycled; 
+	__u64	TimeWaitKilled; 
+	__u64	PAWSPassiveRejected; 
+	__u64	PAWSActiveRejected; 
+	__u64	PAWSEstabRejected; 
+	__u64	DelayedACKs;
+	__u64	DelayedACKLocked;
+	__u64	DelayedACKLost;
+	__u64	ListenOverflows;
+	__u64	ListenDrops;
+	__u64	TCPPrequeued;
+	__u64	TCPDirectCopyFromBacklog;
+	__u64	TCPDirectCopyFromPrequeue;
+	__u64	TCPPrequeueDropped;
+	__u64	TCPHPHits;
+	__u64	TCPHPHitsToUser;
+	__u64	TCPPureAcks;
+	__u64	TCPHPAcks;
+	__u64	TCPRenoRecovery;
+	__u64	TCPSackRecovery;
+	__u64	TCPSACKReneging;
+	__u64	TCPFACKReorder;
+	__u64	TCPSACKReorder;
+	__u64	TCPRenoReorder;
+	__u64	TCPTSReorder;
+	__u64	TCPFullUndo;
+	__u64	TCPPartialUndo;
+	__u64	TCPDSACKUndo;
+	__u64	TCPLossUndo;
+	__u64	TCPLoss;
+	__u64	TCPLostRetransmit;
+	__u64	TCPRenoFailures;
+	__u64	TCPSackFailures;
+	__u64	TCPLossFailures;
+	__u64	TCPFastRetrans;
+	__u64	TCPForwardRetrans;
+	__u64	TCPSlowStartRetrans;
+	__u64	TCPTimeouts;
+	__u64	TCPRenoRecoveryFail;
+	__u64	TCPSackRecoveryFail;
+	__u64	TCPSchedulerFailed;
+	__u64	TCPRcvCollapsed;
+	__u64	TCPDSACKOldSent;
+	__u64	TCPDSACKOfoSent;
+	__u64	TCPDSACKRecv;
+	__u64	TCPDSACKOfoRecv;
+	__u64	TCPAbortOnSyn;
+	__u64	TCPAbortOnData;
+	__u64	TCPAbortOnClose;
+	__u64	TCPAbortOnMemory;
+	__u64	TCPAbortOnTimeout;
+	__u64	TCPAbortOnLinger;
+	__u64	TCPAbortFailed;
+	__u64	TCPMemoryPressures;
+	__u64   __pad[0];
 };
 
 
diff -urN linux-2.6.1/net/ipv4/proc.c linux-2.6.1-ipv6mib2-64/net/ipv4/proc.c
--- linux-2.6.1/net/ipv4/proc.c	2004-01-08 22:59:05.000000000 -0800
+++ linux-2.6.1-ipv6mib2-64/net/ipv4/proc.c	2004-01-13 14:06:51.000000000 -0800
@@ -87,21 +87,21 @@
 	.release = single_release,
 };
 
-static unsigned long
+static __u64 
 fold_field(void *mib[], int nr)
 {
-	unsigned long res = 0;
+	__u64 res = 0;
 	int i;
 
 	for (i = 0; i < NR_CPUS; i++) {
 		if (!cpu_possible(i))
 			continue;
 		res +=
-		    *((unsigned long *) (((void *) per_cpu_ptr(mib[0], i)) +
-					 sizeof (unsigned long) * nr));
+		    *((__u64 *) (((void *) per_cpu_ptr(mib[0], i)) +
+					 sizeof (__u64) * nr));
 		res +=
-		    *((unsigned long *) (((void *) per_cpu_ptr(mib[1], i)) +
-					 sizeof (unsigned long) * nr));
+		    *((__u64 *) (((void *) per_cpu_ptr(mib[1], i)) +
+					 sizeof (__u64) * nr));
 	}
 	return res;
 }
@@ -121,8 +121,8 @@
 			ipv4_devconf.forwarding ? 1 : 2, sysctl_ip_default_ttl);
 
 	for (i = 0;
-	     i < offsetof(struct ip_mib, __pad) / sizeof(unsigned long); i++)
-		seq_printf(seq, " %lu",
+	     i < offsetof(struct ip_mib, __pad) / sizeof(__u64); i++)
+		seq_printf(seq, " %llu",
 			   fold_field((void **) ip_statistics, i));
 
 	seq_printf(seq, "\nIcmp: InMsgs InErrors InDestUnreachs InTimeExcds "
@@ -134,8 +134,8 @@
 			"OutAddrMasks OutAddrMaskReps\nIcmp:");
 
 	for (i = 0;
-	     i < offsetof(struct icmp_mib, dummy) / sizeof(unsigned long); i++)
-		seq_printf(seq, " %lu",
+	     i < offsetof(struct icmp_mib, dummy) / sizeof(__u64); i++)
+		seq_printf(seq, " %llu",
 			   fold_field((void **) icmp_statistics, i)); 
 
 	seq_printf(seq, "\nTcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens "
@@ -143,13 +143,13 @@
 			"InSegs OutSegs RetransSegs InErrs OutRsts\nTcp:");
 
 	for (i = 0;
-	     i < offsetof(struct tcp_mib, __pad) / sizeof(unsigned long); i++) {
-		if (i == (offsetof(struct tcp_mib, TcpMaxConn) / sizeof(unsigned long)))
+	     i < offsetof(struct tcp_mib, __pad) / sizeof(__u64); i++) {
+		if (i == (offsetof(struct tcp_mib, TcpMaxConn) / sizeof(__u64)))
 			/* MaxConn field is negative, RFC 2012 */
 			seq_printf(seq, " %ld", 
-				   fold_field((void **) tcp_statistics, i));
+				  (long int)fold_field((void **) tcp_statistics, i));
 		else
-			seq_printf(seq, " %lu", 
+			seq_printf(seq, " %llu", 
 				   fold_field((void **) tcp_statistics, i));
 	}
 
@@ -157,8 +157,8 @@
 			"Udp:");
 
 	for (i = 0;
-	     i < offsetof(struct udp_mib, __pad) / sizeof(unsigned long); i++)
-		seq_printf(seq, " %lu", 
+	     i < offsetof(struct udp_mib, __pad) / sizeof(__u64); i++)
+		seq_printf(seq, " %llu", 
 				fold_field((void **) udp_statistics, i));
 
 	seq_putc(seq, '\n');
@@ -214,9 +214,9 @@
 		      " TCPAbortFailed TCPMemoryPressures\n"
 		      "TcpExt:");
 	for (i = 0;
-	     i < offsetof(struct linux_mib, __pad) / sizeof(unsigned long); 
+	     i < offsetof(struct linux_mib, __pad) / sizeof(__u64); 
 	     i++)
-		seq_printf(seq, " %lu", 
+		seq_printf(seq, " %llu", 
 		 	   fold_field((void **) net_statistics, i)); 
 	seq_putc(seq, '\n');
 	return 0;
diff -urN linux-2.6.1/net/ipv6/proc.c linux-2.6.1-ipv6mib2-64/net/ipv6/proc.c
--- linux-2.6.1/net/ipv6/proc.c	2004-01-08 22:59:26.000000000 -0800
+++ linux-2.6.1-ipv6mib2-64/net/ipv6/proc.c	2004-01-12 16:21:43.000000000 -0800
@@ -60,13 +60,14 @@
 struct snmp6_item
 {
 	char *name;
+	int   size;
 	int   offset;
 };
-#define SNMP6_SENTINEL	{ .name = NULL, .offset = 0 }
+#define SNMP6_SENTINEL	{ .name = NULL, .size = 0, .offset = 0 }
 
 static struct snmp6_item snmp6_ipv6_list[] = {
 /* ipv6 mib according to RFC 2465 */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct ipv6_mib, x) }
+#define SNMP6_GEN(x) { .name = #x , .size = sizeof(((struct ipv6_mib *)0)->x), .offset = offsetof(struct ipv6_mib, x) }
 	SNMP6_GEN(Ip6InReceives),
 	SNMP6_GEN(Ip6InHdrErrors),
 	SNMP6_GEN(Ip6InTooBigErrors),
@@ -104,7 +105,7 @@
 		OutRouterAdvertisements too.
 		OutGroupMembQueries too.
  */
-#define SNMP6_GEN(x) { .name = #x , .offset = offsetof(struct icmpv6_mib, x) }
+#define SNMP6_GEN(x) { .name = #x , .size = sizeof(((struct icmpv6_mib *)0)->x), .offset = offsetof(struct icmpv6_mib, x) }
 	SNMP6_GEN(Icmp6InMsgs),
 	SNMP6_GEN(Icmp6InErrors),
 	SNMP6_GEN(Icmp6InDestUnreachs),
@@ -138,7 +139,7 @@
 };
 
 static struct snmp6_item snmp6_udp6_list[] = {
-#define SNMP6_GEN(x) { .name = "Udp6" #x , .offset = offsetof(struct udp_mib, Udp##x) }
+#define SNMP6_GEN(x) { .name = "Udp6" #x , .size = sizeof(((struct udp_mib *)0)->Udp##x), .offset = offsetof(struct udp_mib, Udp##x) }
 	SNMP6_GEN(InDatagrams),
 	SNMP6_GEN(NoPorts),
 	SNMP6_GEN(InErrors),
@@ -147,22 +148,27 @@
 	SNMP6_SENTINEL
 };
 
-static unsigned long
-fold_field(void *mib[], int offt)
+static __u64 
+fold_field(void *mib[], int size, int offt)
 {
-        unsigned long res = 0;
+        __u64 res = 0;
         int i;
  
         for (i = 0; i < NR_CPUS; i++) {
                 if (!cpu_possible(i))
                         continue;
-                res +=
-                    *((unsigned long *) (((void *)per_cpu_ptr(mib[0], i)) +
-                                         offt));
-                res +=
-                    *((unsigned long *) (((void *)per_cpu_ptr(mib[1], i)) +
-                                         offt));
-        }
+		if (size == 4) {
+			res += *((__u32 *) 
+				(((void *)per_cpu_ptr(mib[0], i)) + offt));
+			res += *((__u32 *)
+				(((void *)per_cpu_ptr(mib[1], i)) + offt));
+		} else if (size == 8) {
+			res += *((__u64 *) 
+				(((void *)per_cpu_ptr(mib[0], i)) + offt));
+			res += *((__u32 *)
+				(((void *)per_cpu_ptr(mib[1], i)) + offt));
+		}
+	}
         return res;
 }
 
@@ -170,9 +176,9 @@
 snmp6_seq_show_item(struct seq_file *seq, void **mib, struct snmp6_item *itemlist)
 {
 	int i;
-	for (i=0; itemlist[i].name; i++)
-		seq_printf(seq, "%-32s\t%lu\n", itemlist[i].name, 
-				fold_field(mib, itemlist[i].offset));
+	for (i=0; itemlist[i].name; i++) 
+		seq_printf(seq, "%-32s\t%llu\n", itemlist[i].name, 
+			fold_field(mib, itemlist[i].size, itemlist[i].offset));
 }
 
 static int snmp6_seq_show(struct seq_file *seq, void *v)
diff -urN linux-2.6.1/net/sctp/proc.c linux-2.6.1-ipv6mib2-64/net/sctp/proc.c
--- linux-2.6.1/net/sctp/proc.c	2004-01-08 22:59:26.000000000 -0800
+++ linux-2.6.1-ipv6mib2-64/net/sctp/proc.c	2004-01-13 13:57:12.000000000 -0800
@@ -64,21 +64,21 @@
 /* Return the current value of a particular entry in the mib by adding its
  * per cpu counters.
  */ 
-static unsigned long
+static __u64
 fold_field(void *mib[], int nr)
 {
-	unsigned long res = 0;
+	__u64 res = 0;
 	int i;
 
 	for (i = 0; i < NR_CPUS; i++) {
 		if (!cpu_possible(i))
 			continue;
 		res +=
-		    *((unsigned long *) (((void *) per_cpu_ptr(mib[0], i)) +
-					 sizeof (unsigned long) * nr));
+		    *((__u64 *) (((void *) per_cpu_ptr(mib[0], i)) +
+					 sizeof (__u64) * nr));
 		res +=
-		    *((unsigned long *) (((void *) per_cpu_ptr(mib[1], i)) +
-					 sizeof (unsigned long) * nr));
+		    *((__u64 *) (((void *) per_cpu_ptr(mib[1], i)) +
+					 sizeof (__u64) * nr));
 	}
 	return res;
 }
@@ -89,7 +89,7 @@
 	int i;
 
 	for (i = 0; i < sizeof(sctp_snmp_list) / sizeof(char *); i++)
-		seq_printf(seq, "%-32s\t%ld\n", sctp_snmp_list[i],
+		seq_printf(seq, "%-32s\t%llu\n", sctp_snmp_list[i],
 			   fold_field((void **)sctp_statistics, i));
 
 	return 0;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6Prefix netlink notification
  2003-12-05 22:57   ` David S. Miller
@ 2004-01-14 22:54     ` Shirley Ma
  2004-01-15  8:58       ` David S. Miller
  2004-01-14 23:52     ` [PATCH] IPv6 MIB:ipv6RouterAdvert " Shirley Ma
                       ` (2 subsequent siblings)
  3 siblings, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2004-01-14 22:54 UTC (permalink / raw)
  To: David S. Miller; +Cc: kuznet, netdev, xma

[-- Attachment #1: Type: text/plain, Size: 166 bytes --]

> Let's queue this up for 2.6.1, please resend it after 2.6.0 is
> released.

This patch is agaist 2.6.1 kernel.

Thanks
Shirley Ma
IBM Linux Technology Center

[-- Attachment #2: linux-2.6.1-ipv6mib3.patch --]
[-- Type: text/x-diff, Size: 4506 bytes --]

diff -urN linux-2.6.1/include/linux/rtnetlink.h linux-2.6.1-ipv6mib3/include/linux/rtnetlink.h
--- linux-2.6.1/include/linux/rtnetlink.h	2004-01-08 22:59:55.000000000 -0800
+++ linux-2.6.1-ipv6mib3/include/linux/rtnetlink.h	2004-01-13 10:26:07.000000000 -0800
@@ -44,7 +44,10 @@
 #define	RTM_DELTFILTER	(RTM_BASE+29)
 #define	RTM_GETTFILTER	(RTM_BASE+30)
 
-#define	RTM_MAX		(RTM_BASE+31)
+#define RTM_NEWPREFIX	(RTM_BASE+36)
+#define RTM_GETPREFIX	(RTM_BASE+38)
+
+#define	RTM_MAX		(RTM_BASE+39)
 
 /* 
    Generic structure for encapsulation of optional route information.
@@ -459,6 +462,34 @@
 	unsigned	ifi_change;		/* IFF_* change mask */
 };
 
+/********************************************************************
+ *		prefix information 
+ ****/
+
+struct prefixmsg
+{
+	unsigned char	prefix_family;
+	int		prefix_ifindex;
+	unsigned char	prefix_type;
+	unsigned char	prefix_len;
+	unsigned char	prefix_flags;
+};
+
+enum 
+{
+	PREFIX_UNSPEC,
+	PREFIX_ADDRESS,
+	PREFIX_CACHEINFO,
+};
+
+#define PREFIX_MAX	PREFIX_CACHEINFO
+
+struct prefix_cacheinfo
+{
+	__u32	preferred_time;
+	__u32	valid_time;
+};
+
 /* The struct should be in sync with struct net_device_stats */
 struct rtnl_link_stats
 {
@@ -615,6 +646,8 @@
 #define RTMGRP_DECnet_IFADDR    0x1000
 #define RTMGRP_DECnet_ROUTE     0x4000
 
+#define RTMGRP_IPV6_PREFIX	0x20000
+
 /* End of information exported to user level */
 
 #ifdef __KERNEL__
diff -urN linux-2.6.1/include/net/if_inet6.h linux-2.6.1-ipv6mib3/include/net/if_inet6.h
--- linux-2.6.1/include/net/if_inet6.h	2004-01-08 23:00:04.000000000 -0800
+++ linux-2.6.1-ipv6mib3/include/net/if_inet6.h	2004-01-13 10:26:07.000000000 -0800
@@ -25,6 +25,10 @@
 #define IF_RA_RCVD	0x20
 #define IF_RS_SENT	0x10
 
+/* prefix flags */
+#define IF_PREFIX_ONLINK	0x01
+#define IF_PREFIX_AUTOCONF	0x02
+
 #ifdef __KERNEL__
 
 struct inet6_ifaddr 
diff -urN linux-2.6.1/net/ipv6/addrconf.c linux-2.6.1-ipv6mib3/net/ipv6/addrconf.c
--- linux-2.6.1/net/ipv6/addrconf.c	2004-01-08 23:00:03.000000000 -0800
+++ linux-2.6.1-ipv6mib3/net/ipv6/addrconf.c	2004-01-13 10:26:07.000000000 -0800
@@ -138,6 +138,8 @@
 static void addrconf_rs_timer(unsigned long data);
 static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
 
+static void inet6_prefix_notify(int event, struct inet6_dev *idev, 
+				struct prefix_info *pinfo);
 static int ipv6_chk_same_addr(const struct in6_addr *addr, struct net_device *dev);
 
 static struct notifier_block *inet6addr_chain;
@@ -1491,6 +1493,7 @@
 			addrconf_verify(0);
 		}
 	}
+	inet6_prefix_notify(RTM_NEWPREFIX, in6_dev, pinfo);
 	in6_dev_put(in6_dev);
 }
 
@@ -2802,6 +2805,66 @@
 	return skb->len;
 }
 
+static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
+			struct prefix_info *pinfo, u32 pid, u32 seq, int event)
+{
+	struct prefixmsg	*pmsg;
+	struct nlmsghdr 	*nlh;
+	unsigned char		*b = skb->tail;
+	struct prefix_cacheinfo	ci;
+
+	nlh = NLMSG_PUT(skb, pid, seq, event, sizeof(*pmsg));
+	
+	if (pid) 
+		nlh->nlmsg_flags |= NLM_F_MULTI;
+	
+	pmsg = NLMSG_DATA(nlh);
+	pmsg->prefix_family = AF_INET6;
+	pmsg->prefix_ifindex = idev->dev->ifindex;
+	pmsg->prefix_len = pinfo->prefix_len;
+	pmsg->prefix_type = pinfo->type;
+	
+	pmsg->prefix_flags = 0;
+	if (pinfo->onlink)
+		pmsg->prefix_flags |= IF_PREFIX_ONLINK;
+	if (pinfo->autoconf)
+		pmsg->prefix_flags |= IF_PREFIX_AUTOCONF;
+
+	RTA_PUT(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix);
+
+	ci.preferred_time = ntohl(pinfo->prefered);
+	ci.valid_time = ntohl(pinfo->valid);
+	RTA_PUT(skb, PREFIX_CACHEINFO, sizeof(ci), &ci);
+
+	nlh->nlmsg_len = skb->tail - b;
+	return skb->len;
+
+nlmsg_failure:
+rtattr_failure:
+	skb_trim(skb, b - skb->data);
+	return -1;
+}
+
+static void inet6_prefix_notify(int event, struct inet6_dev *idev, 
+			 struct prefix_info *pinfo)
+{
+	struct sk_buff *skb;
+	int size = NLMSG_SPACE(sizeof(struct prefixmsg)+128);
+
+	skb = alloc_skb(size, GFP_ATOMIC);
+	if (!skb) {
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_PREFIX, ENOBUFS);
+		return;
+	}
+	if (inet6_fill_prefix(skb, idev, pinfo, 0, 0, event) < 0) {
+		kfree_skb(skb);
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_PREFIX, EINVAL);
+		return;
+	}
+	NETLINK_CB(skb).dst_groups = RTMGRP_IPV6_PREFIX;
+	netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_PREFIX, GFP_ATOMIC);
+}
+
 static struct rtnetlink_link inet6_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = {
 	[RTM_GETLINK - RTM_BASE] = { .dumpit	= inet6_dump_ifinfo, },
 	[RTM_NEWADDR - RTM_BASE] = { .doit	= inet6_rtm_newaddr, },

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] IPv6 MIB:ipv6RouterAdvert netlink notification
  2003-12-05 22:57   ` David S. Miller
  2004-01-14 22:54     ` Shirley Ma
@ 2004-01-14 23:52     ` Shirley Ma
  2004-01-15  8:52       ` David S. Miller
  2004-01-15  0:21     ` [PATCH] IPv6 MIB:ipv6inetNetToMediaTable Shirley Ma
  2004-01-15  0:22     ` [PATCH] IPv6 MIB:ipv6DefaultRouterTable Shirley Ma
  3 siblings, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2004-01-14 23:52 UTC (permalink / raw)
  To: David S. Miller; +Cc: kuznet, netdev, xma

[-- Attachment #1: Type: text/plain, Size: 137 bytes --]

Once receiving a router advertisement message,
a netlink notification event will be created.

This patch is against linux-2.6.1.



[-- Attachment #2: linux-2.6.1-ipv6mib8.patch --]
[-- Type: text/x-diff, Size: 4412 bytes --]

diff -urN linux-2.6.1/include/linux/rtnetlink.h linux-2.6.1-ipv6mib8/include/linux/rtnetlink.h
--- linux-2.6.1/include/linux/rtnetlink.h	2004-01-08 22:59:55.000000000 -0800
+++ linux-2.6.1-ipv6mib8/include/linux/rtnetlink.h	2004-01-13 10:45:20.000000000 -0800
@@ -44,7 +44,10 @@
 #define	RTM_DELTFILTER	(RTM_BASE+29)
 #define	RTM_GETTFILTER	(RTM_BASE+30)
 
-#define	RTM_MAX		(RTM_BASE+31)
+#define RTM_NEWRA	(RTM_BASE+32)
+#define RTM_GETRA	(RTM_BASE+34)
+
+#define	RTM_MAX		(RTM_BASE+35)
 
 /* 
    Generic structure for encapsulation of optional route information.
@@ -441,6 +444,38 @@
 };
 
 /*****************************************************************
+ *		Route Advertisement specific messages.
+ * ******/
+
+/* struct iframsg
+ * passes router advertisement specific information
+ */
+
+struct iframsg
+{
+	unsigned char   ifra_family;
+	unsigned	ifra_flags;
+	int		ifra_index;
+};
+
+enum
+{
+	IFRA_UNSPEC,
+	IFRA_LMTU,
+	IFRA_CACHEINFO
+};
+
+/* max_adver_interval, min_adver_interval should be gotten from user level */
+struct ifra_cacheinfo {
+	__u32		hop_limit;
+	__u32		lifetime;
+	__u32		reachable_time;
+	__u32		retrans_time;
+};
+
+#define IFRA_MAX IFRA_CACHEINFO
+
+/*****************************************************************
  *		Link layer specific messages.
  ****/
 
@@ -615,6 +650,8 @@
 #define RTMGRP_DECnet_IFADDR    0x1000
 #define RTMGRP_DECnet_ROUTE     0x4000
 
+#define RTMGRP_IPV6_IFRA	0x10000
+
 /* End of information exported to user level */
 
 #ifdef __KERNEL__
diff -urN linux-2.6.1/include/net/ndisc.h linux-2.6.1-ipv6mib8/include/net/ndisc.h
--- linux-2.6.1/include/net/ndisc.h	2004-01-08 22:59:55.000000000 -0800
+++ linux-2.6.1-ipv6mib8/include/net/ndisc.h	2004-01-13 10:45:20.000000000 -0800
@@ -98,6 +98,10 @@
 
 extern void			igmp6_cleanup(void);
 
+extern void			inet6_ifra_notify(int event,
+						  struct inet6_dev *idev,
+						  struct ra_msg *ra_msg);
+
 static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, struct in6_addr *addr)
 {
 
diff -urN linux-2.6.1/net/ipv6/addrconf.c linux-2.6.1-ipv6mib8/net/ipv6/addrconf.c
--- linux-2.6.1/net/ipv6/addrconf.c	2004-01-08 23:00:03.000000000 -0800
+++ linux-2.6.1-ipv6mib8/net/ipv6/addrconf.c	2004-01-13 10:45:20.000000000 -0800
@@ -2802,6 +2802,62 @@
 	return skb->len;
 }
 
+static int inet6_fill_ifra(struct sk_buff *skb, struct inet6_dev *idev,
+			   struct ra_msg *ra_msg, u32 pid, u32 seq, int event)
+{
+	struct iframsg		*ifra;
+	struct nlmsghdr 	*nlh;
+	unsigned char		*b = skb->tail;
+	__u32			mtu = idev->dev->mtu;
+	struct ifra_cacheinfo	ci;
+
+	nlh = NLMSG_PUT(skb, pid, seq, event, sizeof(*ifra));
+	
+	if (pid) 
+		nlh->nlmsg_flags |= NLM_F_MULTI;
+	
+	ifra = NLMSG_DATA(nlh);
+	ifra->ifra_family = AF_INET6;
+	ifra->ifra_index = idev->dev->ifindex;
+	ifra->ifra_flags = idev->if_flags;
+
+	RTA_PUT(skb, IFRA_LMTU, sizeof(mtu), &mtu);
+
+	ci.hop_limit = ra_msg->icmph.icmp6_hop_limit;
+	ci.lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
+	ci.reachable_time = ntohl(ra_msg->reachable_time);
+	ci.retrans_time = ntohl(ra_msg->retrans_timer);
+	RTA_PUT(skb, IFRA_CACHEINFO, sizeof(ci), &ci);
+
+	nlh->nlmsg_len = skb->tail - b;
+	return skb->len;
+
+nlmsg_failure:
+rtattr_failure:
+	skb_trim(skb, b - skb->data);
+	return -1;
+}
+
+void inet6_ifra_notify(int event, struct inet6_dev *idev, 
+			      struct ra_msg *ra_msg)
+{
+	struct sk_buff *skb;
+	int size = NLMSG_SPACE(sizeof(struct iframsg)+128);
+
+	skb = alloc_skb(size, GFP_ATOMIC);
+	if (!skb) {
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_IFRA, ENOBUFS);
+		return;
+	}
+	if (inet6_fill_ifra(skb, idev, ra_msg, 0, 0, event) < 0) {
+		kfree_skb(skb);
+		netlink_set_err(rtnl, 0, RTMGRP_IPV6_IFRA, EINVAL);
+		return;
+	}
+	NETLINK_CB(skb).dst_groups = RTMGRP_IPV6_IFRA;
+	netlink_broadcast(rtnl, skb, 0, RTMGRP_IPV6_IFRA, GFP_ATOMIC);
+}
+
 static struct rtnetlink_link inet6_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = {
 	[RTM_GETLINK - RTM_BASE] = { .dumpit	= inet6_dump_ifinfo, },
 	[RTM_NEWADDR - RTM_BASE] = { .doit	= inet6_rtm_newaddr, },
diff -urN linux-2.6.1/net/ipv6/ndisc.c linux-2.6.1-ipv6mib8/net/ipv6/ndisc.c
--- linux-2.6.1/net/ipv6/ndisc.c	2004-01-08 22:59:44.000000000 -0800
+++ linux-2.6.1-ipv6mib8/net/ipv6/ndisc.c	2004-01-13 10:45:20.000000000 -0800
@@ -1190,6 +1190,7 @@
 out:
 	if (rt)
 		dst_release(&rt->u.dst);
+	inet6_ifra_notify(RTM_NEWRA, in6_dev, ra_msg);
 	in6_dev_put(in6_dev);
 }
 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] IPv6 MIB:ipv6inetNetToMediaTable
  2003-12-05 22:57   ` David S. Miller
  2004-01-14 22:54     ` Shirley Ma
  2004-01-14 23:52     ` [PATCH] IPv6 MIB:ipv6RouterAdvert " Shirley Ma
@ 2004-01-15  0:21     ` Shirley Ma
  2004-01-15  8:48       ` David S. Miller
  2004-01-15  9:04       ` YOSHIFUJI Hideaki / 吉藤英明
  2004-01-15  0:22     ` [PATCH] IPv6 MIB:ipv6DefaultRouterTable Shirley Ma
  3 siblings, 2 replies; 18+ messages in thread
From: Shirley Ma @ 2004-01-15  0:21 UTC (permalink / raw)
  To: David S. Miller; +Cc: kuznet, netdev, xma

[-- Attachment #1: Type: text/plain, Size: 92 bytes --]

This patch is against 2.6.1 kernel.

Thanks
Shirley Ma
IBM Linux Technology Center



[-- Attachment #2: linux-2.6.1-ipv6mib5.patch --]
[-- Type: text/x-diff, Size: 2150 bytes --]

diff -urN linux-2.6.1/include/linux/rtnetlink.h linux-2.6.1-ipv6mib5/include/linux/rtnetlink.h
--- linux-2.6.1/include/linux/rtnetlink.h	2004-01-08 22:59:55.000000000 -0800
+++ linux-2.6.1-ipv6mib5/include/linux/rtnetlink.h	2004-01-13 10:38:27.000000000 -0800
@@ -3,6 +3,7 @@
 
 #include <linux/netlink.h>
 
+#define TIME_DELTA(a,b) ((unsigned long)((long)(a) - (long)(b)))
 /****
  *		Routing/neighbour discovery messages.
  ****/
diff -urN linux-2.6.1/net/core/neighbour.c linux-2.6.1-ipv6mib5/net/core/neighbour.c
--- linux-2.6.1/net/core/neighbour.c	2004-01-08 22:59:06.000000000 -0800
+++ linux-2.6.1-ipv6mib5/net/core/neighbour.c	2004-01-14 15:38:57.000000000 -0800
@@ -1339,7 +1339,6 @@
 static int neigh_fill_info(struct sk_buff *skb, struct neighbour *n,
 			   u32 pid, u32 seq, int event)
 {
-	unsigned long now = jiffies;
 	unsigned char *b = skb->tail;
 	struct nda_cacheinfo ci;
 	int locked = 0;
@@ -1357,9 +1356,13 @@
 	ndm->ndm_state	 = n->nud_state;
 	if (n->nud_state & NUD_VALID)
 		RTA_PUT(skb, NDA_LLADDR, n->dev->addr_len, n->ha);
-	ci.ndm_used	 = now - n->used;
-	ci.ndm_confirmed = now - n->confirmed;
-	ci.ndm_updated	 = now - n->updated;
+	ci.ndm_used	 = (__u32)(TIME_DELTA(n->used, INITIAL_JIFFIES)/HZ*100
+			   + TIME_DELTA(n->used, INITIAL_JIFFIES)%HZ*100/HZ);
+	ci.ndm_confirmed = (__u32)(TIME_DELTA(n->confirmed, INITIAL_JIFFIES)/HZ
+			   *100 + TIME_DELTA(n->confirmed, INITIAL_JIFFIES)%HZ
+			   *100/HZ);
+	ci.ndm_updated	 = (__u32)(TIME_DELTA(n->updated, INITIAL_JIFFIES)/HZ*100
+			   + TIME_DELTA(n->updated, INITIAL_JIFFIES)%HZ*100/HZ);
 	ci.ndm_refcnt	 = atomic_read(&n->refcnt) - 1;
 	read_unlock_bh(&n->lock);
 	locked		 = 0;
diff -urN linux-2.6.1/net/ipv6/addrconf.c linux-2.6.1-ipv6mib5/net/ipv6/addrconf.c
--- linux-2.6.1/net/ipv6/addrconf.c	2004-01-08 23:00:03.000000000 -0800
+++ linux-2.6.1-ipv6mib5/net/ipv6/addrconf.c	2004-01-13 10:38:27.000000000 -0800
@@ -93,7 +93,6 @@
 #endif
 
 #define	INFINITY_LIFE_TIME	0xFFFFFFFF
-#define TIME_DELTA(a,b) ((unsigned long)((long)(a) - (long)(b)))
 
 #ifdef CONFIG_SYSCTL
 static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf *p);

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] IPv6 MIB:ipv6DefaultRouterTable
  2003-12-05 22:57   ` David S. Miller
                       ` (2 preceding siblings ...)
  2004-01-15  0:21     ` [PATCH] IPv6 MIB:ipv6inetNetToMediaTable Shirley Ma
@ 2004-01-15  0:22     ` Shirley Ma
  2004-01-15  9:03       ` YOSHIFUJI Hideaki / 吉藤英明
  3 siblings, 1 reply; 18+ messages in thread
From: Shirley Ma @ 2004-01-15  0:22 UTC (permalink / raw)
  To: David S. Miller; +Cc: kuznet, netdev, xma

[-- Attachment #1: Type: text/plain, Size: 91 bytes --]

This patch is agaist 2.6.1 kernel.

Thanks
Shirley Ma
IBM Linux Technology Center



[-- Attachment #2: linux-2.6.1-ipv6mib7.patch --]
[-- Type: text/x-diff, Size: 1121 bytes --]

diff -urN linux-2.6.1/include/linux/rtnetlink.h linux-2.6.1-ipv6mib7/include/linux/rtnetlink.h
--- linux-2.6.1/include/linux/rtnetlink.h	2004-01-08 22:59:55.000000000 -0800
+++ linux-2.6.1-ipv6mib7/include/linux/rtnetlink.h	2004-01-13 10:41:55.000000000 -0800
@@ -247,7 +247,7 @@
 {
 	__u32	rta_clntref;
 	__u32	rta_lastuse;
-	__s32	rta_expires;
+	__u32	rta_expires;	/* seconds */
 	__u32	rta_error;
 	__u32	rta_used;
 
diff -urN linux-2.6.1/net/ipv6/route.c linux-2.6.1-ipv6mib7/net/ipv6/route.c
--- linux-2.6.1/net/ipv6/route.c	2004-01-08 22:59:48.000000000 -0800
+++ linux-2.6.1-ipv6mib7/net/ipv6/route.c	2004-01-13 10:41:55.000000000 -0800
@@ -1535,8 +1535,8 @@
 		RTA_PUT(skb, RTA_OIF, sizeof(int), &rt->rt6i_dev->ifindex);
 	RTA_PUT(skb, RTA_PRIORITY, 4, &rt->rt6i_metric);
 	ci.rta_lastuse = jiffies_to_clock_t(jiffies - rt->u.dst.lastuse);
-	if (rt->rt6i_expires)
-		ci.rta_expires = jiffies_to_clock_t(rt->rt6i_expires - jiffies);
+	if (rt->rt6i_expires && time_after(rt->rt6i_expires, jiffies))
+		ci.rta_expires = (rt->rt6i_expires - jiffies)/HZ;
 	else
 		ci.rta_expires = 0;
 	ci.rta_used = rt->u.dst.__use;

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6inetNetToMediaTable
  2004-01-15  0:21     ` [PATCH] IPv6 MIB:ipv6inetNetToMediaTable Shirley Ma
@ 2004-01-15  8:48       ` David S. Miller
  2004-01-15  9:04       ` YOSHIFUJI Hideaki / 吉藤英明
  1 sibling, 0 replies; 18+ messages in thread
From: David S. Miller @ 2004-01-15  8:48 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Wed, 14 Jan 2004 16:21:26 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> This patch is against 2.6.1 kernel.

Can you explain what this patch is doing, and specifically what bug it is fixing?

I feel dense as I can't figure it out just by studying your patch and the code it
touches :-)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6RouterAdvert netlink notification
  2004-01-14 23:52     ` [PATCH] IPv6 MIB:ipv6RouterAdvert " Shirley Ma
@ 2004-01-15  8:52       ` David S. Miller
  2004-01-15  9:10         ` YOSHIFUJI Hideaki / 吉藤英明
  0 siblings, 1 reply; 18+ messages in thread
From: David S. Miller @ 2004-01-15  8:52 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Wed, 14 Jan 2004 15:52:51 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> Once receiving a router advertisement message,
> a netlink notification event will be created.
> 
> This patch is against linux-2.6.1.

This patch looks fine, except I can't see how RTM_GETRA is used anywhere.
Even if it will be used by some future change, please remove it until that
later change is made.

So please either show where RTM_GETRA is used or regenerate the patch with
that macro definition removed.

Thanks.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH]snmp6 64-bit counter support in proc.c
  2004-01-14 22:52       ` Shirley Ma
@ 2004-01-15  8:57         ` David S. Miller
  0 siblings, 0 replies; 18+ messages in thread
From: David S. Miller @ 2004-01-15  8:57 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Wed, 14 Jan 2004 14:52:51 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> > "sizeof(unsigned long)" evaluates to 8 on 64-bit systems,
> > yet you assume it always evaluated to 4 as on 32-bit systems.
> >
> > Maybe it would be wiser to explicitly use 'u32' and 'u64' for
> > the types of the snmp counters?
> >
> > This has always been a sore area.
> 
> This is the new patch against 2.6.1 kernel.

I am personally fine with this patch, but I do believe some folks might find
it controversial (for whatever reason) to move all of these stats over to 64-bits.

So I'm going to let this sit for another day or two so people can voice any
objections they may have.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6Prefix netlink notification
  2004-01-14 22:54     ` Shirley Ma
@ 2004-01-15  8:58       ` David S. Miller
  0 siblings, 0 replies; 18+ messages in thread
From: David S. Miller @ 2004-01-15  8:58 UTC (permalink / raw)
  To: Shirley Ma; +Cc: kuznet, netdev, xma

On Wed, 14 Jan 2004 14:54:27 -0800
Shirley Ma <mashirle@us.ibm.com> wrote:

> > Let's queue this up for 2.6.1, please resend it after 2.6.0 is
> > released.
> 
> This patch is agaist 2.6.1 kernel.

Applied, thanks Shirley.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6DefaultRouterTable
  2004-01-15  0:22     ` [PATCH] IPv6 MIB:ipv6DefaultRouterTable Shirley Ma
@ 2004-01-15  9:03       ` YOSHIFUJI Hideaki / 吉藤英明
  0 siblings, 0 replies; 18+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-01-15  9:03 UTC (permalink / raw)
  To: mashirle; +Cc: davem, kuznet, netdev, xma

In article <200401141622.09299.mashirle@us.ibm.com> (at Wed, 14 Jan 2004 16:22:09 -0800), Shirley Ma <mashirle@us.ibm.com> says:

> This patch is agaist 2.6.1 kernel.

Wrong. Do not change user interface.

--yoshfuji

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6inetNetToMediaTable
  2004-01-15  0:21     ` [PATCH] IPv6 MIB:ipv6inetNetToMediaTable Shirley Ma
  2004-01-15  8:48       ` David S. Miller
@ 2004-01-15  9:04       ` YOSHIFUJI Hideaki / 吉藤英明
  1 sibling, 0 replies; 18+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-01-15  9:04 UTC (permalink / raw)
  To: mashirle; +Cc: davem, kuznet, netdev, xma

In article <200401141621.26317.mashirle@us.ibm.com> (at Wed, 14 Jan 2004 16:21:26 -0800), Shirley Ma <mashirle@us.ibm.com> says:

> This patch is against 2.6.1 kernel.

Wrong. Do not change interface.

--yoshfuji

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] IPv6 MIB:ipv6RouterAdvert netlink notification
  2004-01-15  8:52       ` David S. Miller
@ 2004-01-15  9:10         ` YOSHIFUJI Hideaki / 吉藤英明
  0 siblings, 0 replies; 18+ messages in thread
From: YOSHIFUJI Hideaki / 吉藤英明 @ 2004-01-15  9:10 UTC (permalink / raw)
  To: mashirle; +Cc: kuznet, netdev, xma, davem

In article <20040115005252.6e6f1d81.davem@redhat.com> (at Thu, 15 Jan 2004 00:52:52 -0800), "David S. Miller" <davem@redhat.com> says:

> > Once receiving a router advertisement message,
> > a netlink notification event will be created.
> > 
> > This patch is against linux-2.6.1.
> 
> This patch looks fine, except I can't see how RTM_GETRA is used anywhere.
> Even if it will be used by some future change, please remove it until that
> later change is made.

Hmm, why do we need this?  What kind of usage?
I think you can do this in user space by opening raw socket.

--yoshfuji

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2004-01-15  9:10 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-11-20  0:21 IPv6 MIB:ipv6PrefixTable implementation Shirley Ma
2003-12-02 12:40 ` kuznet
2003-12-05 20:14   ` [PATCH]snmp6 64-bit counter support in proc.c Shirley Ma
2003-12-05 20:31     ` David S. Miller
2004-01-14 22:52       ` Shirley Ma
2004-01-15  8:57         ` David S. Miller
2003-12-05 21:51 ` [PATCH] IPv6 MIB:ipv6Prefix netlink notification Shirley Ma
2003-12-05 22:57   ` David S. Miller
2004-01-14 22:54     ` Shirley Ma
2004-01-15  8:58       ` David S. Miller
2004-01-14 23:52     ` [PATCH] IPv6 MIB:ipv6RouterAdvert " Shirley Ma
2004-01-15  8:52       ` David S. Miller
2004-01-15  9:10         ` YOSHIFUJI Hideaki / 吉藤英明
2004-01-15  0:21     ` [PATCH] IPv6 MIB:ipv6inetNetToMediaTable Shirley Ma
2004-01-15  8:48       ` David S. Miller
2004-01-15  9:04       ` YOSHIFUJI Hideaki / 吉藤英明
2004-01-15  0:22     ` [PATCH] IPv6 MIB:ipv6DefaultRouterTable Shirley Ma
2004-01-15  9:03       ` YOSHIFUJI Hideaki / 吉藤英明

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).