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