Module Name:    src
Committed By:   kefren
Date:           Thu Jun 16 20:42:15 UTC 2011

Modified Files:
        src/usr.sbin/ldpd: mpls_routes.c

Log Message:
Correct prefixlen->sockaddr calculation. Now ldpd may finally allow MPLS
forwarding for default route.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/ldpd/mpls_routes.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/ldpd/mpls_routes.c
diff -u src/usr.sbin/ldpd/mpls_routes.c:1.7 src/usr.sbin/ldpd/mpls_routes.c:1.8
--- src/usr.sbin/ldpd/mpls_routes.c:1.7	Thu Jun 16 07:11:51 2011
+++ src/usr.sbin/ldpd/mpls_routes.c	Thu Jun 16 20:42:15 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: mpls_routes.c,v 1.7 2011/06/16 07:11:51 kefren Exp $ */
+/* $NetBSD: mpls_routes.c,v 1.8 2011/06/16 20:42:15 kefren Exp $ */
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -208,11 +208,7 @@
 from_cidr_to_union(uint8_t prefixlen)
 {
 	union sockunion *u;
-	int32_t n = -1;
-	uint32_t *m = (uint32_t*)&n;
-
-	*m = (*m >> (32 - prefixlen) ) << (32 - prefixlen);
-	*m = ntohl(*m);
+	uint32_t m = 0xFFFFFFFF;
 
 	u = calloc(1, sizeof(*u));
 
@@ -222,10 +218,12 @@
 	}
 	u->sin.sin_len = sizeof(struct sockaddr_in);
 	u->sin.sin_family = AF_INET;
-	u->sin.sin_addr.s_addr = *m;
-
+	if (prefixlen != 0) {
+		m = (m >> (32 - prefixlen) ) << (32 - prefixlen);
+		m = ntohl(m);
+		u->sin.sin_addr.s_addr = m;
+	}
 	return u;
-
 }
 
 uint8_t 

Reply via email to