Hi,

I'm working on the IpAddressTable for bsnmpd. This table has two rows 
ipAddressCreated and ipAddressLastUpdated which seem to
correspond to the created and changed fields of the struct in6_ifaddr. Because 
there seems no way (except for poking in the
kernel memory) to get at these values I have added an ioctl to get them much in 
the spirit of the other ioctls for IPv6 addresses.

I'm not sure how the ioctl codes are allocated so I just took the next 
available one. If this looks ok and there are no principal problems,
I would like to commit that.

harti

Index: in6.c
===================================================================
RCS file: /usr/cvsup/src/sys/netinet6/in6.c,v
retrieving revision 1.121.2.8
diff -u -r1.121.2.8 in6.c
--- in6.c       28 Oct 2009 21:45:25 -0000      1.121.2.8
+++ in6.c       25 Nov 2009 17:41:40 -0000
@@ -312,6 +312,7 @@
        case SIOCSIFALIFETIME_IN6:
        case SIOCGIFSTAT_IN6:
        case SIOCGIFSTAT_ICMP6:
+       case SIOCGIFATIMES_IN6:
                sa6 = &ifr->ifr_addr;
                break;
        default:
@@ -383,6 +384,7 @@
        case SIOCGIFNETMASK_IN6:
        case SIOCGIFDSTADDR_IN6:
        case SIOCGIFALIFETIME_IN6:
+       case SIOCGIFATIMES_IN6:
                /* must think again about its semantics */
                if (ia == NULL) {
                        error = EADDRNOTAVAIL;
@@ -652,6 +654,11 @@
                        prelist_remove(pr);
                EVENTHANDLER_INVOKE(ifaddr_event, ifp);
                break;
+
+       case SIOCGIFATIMES_IN6:
+               ifr->ifr_ifru.ifru_times[0] = ia->ia6_createtime;
+               ifr->ifr_ifru.ifru_times[1] = ia->ia6_updatetime;
+               break;
        }
 
        default:
Index: in6_var.h
===================================================================
RCS file: /usr/cvsup/src/sys/netinet6/in6_var.h,v
retrieving revision 1.45.2.1
diff -u -r1.45.2.1 in6_var.h
--- in6_var.h   3 Aug 2009 08:13:06 -0000       1.45.2.1
+++ in6_var.h   25 Nov 2009 17:07:34 -0000
@@ -277,6 +277,7 @@
                struct in6_ifstat ifru_stat;
                struct icmp6_ifstat ifru_icmp6stat;
                u_int32_t ifru_scope_id[16];
+               time_t  ifru_times[2];
        } ifr_ifru;
 };
 
@@ -463,6 +464,8 @@
 #define SIOCAADDRCTL_POLICY    _IOW('u', 108, struct in6_addrpolicy)
 #define SIOCDADDRCTL_POLICY    _IOW('u', 109, struct in6_addrpolicy)
 
+#define        SIOCGIFATIMES_IN6       _IOWR('i', 110, struct in6_ifreq)
+
 #define IN6_IFF_ANYCAST                0x01    /* anycast address */
 #define IN6_IFF_TENTATIVE      0x02    /* tentative address */
 #define IN6_IFF_DUPLICATED     0x04    /* DAD detected duplicate */
_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to