* 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).