This simplifies the addresss reading code a little by scanning
it directly into 4 32bit unsigned integers which are then converted
into network byte order.
The former construction of scaning the address into 8 strings, each
representing 16bits, and then using sfprintf to write these into
a buffer as integers seems a little bit akward to me.
===================================================================
--- heartbeat-ipv6addr.orig/resources/OCF/IPv6addr.c 2007-04-11
17:30:37.000000000 +0900
+++ heartbeat-ipv6addr/resources/OCF/IPv6addr.c 2007-04-11 17:33:10.000000000
+0900
@@ -428,12 +428,11 @@
scan_if(struct in6_addr* addr_target, int* plen_target, int use_mask)
{
FILE *f;
- char addr6[40];
static char devname[21]="";
struct in6_addr addr;
struct in6_addr mask;
unsigned int plen, scope, dad_status, if_idx;
- char addr6p[8][5];
+ unsigned int addr6p[4];
/* open /proc/net/if_inet6 file */
if ((f = fopen(IF_INET6, "r")) == NULL) {
@@ -441,20 +440,19 @@
}
/* Loop for each entry */
- while ( fscanf(f,"%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3],
- addr6p[4], addr6p[5], addr6p[6], addr6p[7],
- &if_idx, &plen, &scope, &dad_status, devname) == 13){
+ while ( fscanf(f,"%08x%08x%08x%08x %02x %02x %02x %02x %20s\n",
+ &addr6p[0], &addr6p[1], &addr6p[2], &addr6p[3],
+ &if_idx, &plen, &scope, &dad_status, devname) == 9){
int i;
int n;
int s;
gboolean same = TRUE;
- sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s",
- addr6p[0], addr6p[1], addr6p[2], addr6p[3],
- addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
-
+ for (i = 0; i < 4; i++) {
+ addr.s6_addr32[i] = htonl(addr6p[i]);
+ }
+
/* Only Global address entry would be considered.
* maybe change?
*/
@@ -470,9 +468,6 @@
}
*plen_target = plen;
- /* Convert string to sockaddr_in6 */
- inet_pton(AF_INET6, addr6, &addr);
-
/* Make the mask based on prefix length */
memset(mask.s6_addr, 0xff, 16);
if (use_mask && plen < 128) {
--
--
Horms
H: http://www.vergenet.net/~horms/
W: http://www.valinux.co.jp/en/
_______________________________________________________
Linux-HA-Dev: [EMAIL PROTECTED]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/