]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib/prefix: flip the bitrot compost
authorDavid Lamparter <equinox@diac24.net>
Wed, 27 Nov 2019 20:43:27 +0000 (21:43 +0100)
committerDavid Lamparter <equinox@diac24.net>
Sat, 14 Dec 2019 11:28:18 +0000 (12:28 +0100)
Signed-off-by: David Lamparter <equinox@diac24.net>
lib/prefix.c
lib/prefix.h

index e2bf3b949ceae77868eeca5bde085174c7072925..219f798dcc947f2e713770070a0812e0d3a33a41 100644 (file)
@@ -37,394 +37,6 @@ DEFINE_MTYPE_STATIC(LIB, PREFIX_FLOWSPEC, "Prefix Flowspec")
 static const uint8_t maskbit[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0,
                                  0xf8, 0xfc, 0xfe, 0xff};
 
-static const struct in6_addr maskbytes6[] = {
-       /* /0   */ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /1   */
-       {{{0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /2   */
-       {{{0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /3   */
-       {{{0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /4   */
-       {{{0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /5   */
-       {{{0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /6   */
-       {{{0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /7   */
-       {{{0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /8   */
-       {{{0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /9   */
-       {{{0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /10  */
-       {{{0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /11  */
-       {{{0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /12  */
-       {{{0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /13  */
-       {{{0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /14  */
-       {{{0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /15  */
-       {{{0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /16  */
-       {{{0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /17  */
-       {{{0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /18  */
-       {{{0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /19  */
-       {{{0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /20  */
-       {{{0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /21  */
-       {{{0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /22  */
-       {{{0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /23  */
-       {{{0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /24  */
-       {{{0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /25  */
-       {{{0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /26  */
-       {{{0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /27  */
-       {{{0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /28  */
-       {{{0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /29  */
-       {{{0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /30  */
-       {{{0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /31  */
-       {{{0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /32  */
-       {{{0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /33  */
-       {{{0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /34  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /35  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /36  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /37  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /38  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /39  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /40  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /41  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /42  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /43  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /44  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /45  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /46  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /47  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /48  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /49  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /50  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /51  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /52  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /53  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /54  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /55  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /56  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /57  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /58  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /59  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /60  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /61  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /62  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /63  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /64  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /65  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /66  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /67  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /68  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /69  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /70  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /71  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /72  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /73  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /74  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /75  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /76  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /77  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /78  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /79  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /80  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /81  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /82  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /83  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /84  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /85  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /86  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /87  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /88  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0x00, 0x00, 0x00, 0x00, 0x00}}},
-       /* /89  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0x80, 0x00, 0x00, 0x00, 0x00}}},
-       /* /90  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xc0, 0x00, 0x00, 0x00, 0x00}}},
-       /* /91  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xe0, 0x00, 0x00, 0x00, 0x00}}},
-       /* /92  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xf0, 0x00, 0x00, 0x00, 0x00}}},
-       /* /93  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xf8, 0x00, 0x00, 0x00, 0x00}}},
-       /* /94  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xfc, 0x00, 0x00, 0x00, 0x00}}},
-       /* /95  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xfe, 0x00, 0x00, 0x00, 0x00}}},
-       /* /96  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0x00, 0x00, 0x00, 0x00}}},
-       /* /97  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0x80, 0x00, 0x00, 0x00}}},
-       /* /98  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xc0, 0x00, 0x00, 0x00}}},
-       /* /99  */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xe0, 0x00, 0x00, 0x00}}},
-       /* /100 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xf0, 0x00, 0x00, 0x00}}},
-       /* /101 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xf8, 0x00, 0x00, 0x00}}},
-       /* /102 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xfc, 0x00, 0x00, 0x00}}},
-       /* /103 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xfe, 0x00, 0x00, 0x00}}},
-       /* /104 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0x00, 0x00, 0x00}}},
-       /* /105 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0x80, 0x00, 0x00}}},
-       /* /106 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xc0, 0x00, 0x00}}},
-       /* /107 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xe0, 0x00, 0x00}}},
-       /* /108 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xf0, 0x00, 0x00}}},
-       /* /109 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xf8, 0x00, 0x00}}},
-       /* /110 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xfc, 0x00, 0x00}}},
-       /* /111 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xfe, 0x00, 0x00}}},
-       /* /112 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0x00, 0x00}}},
-       /* /113 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0x80, 0x00}}},
-       /* /114 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xc0, 0x00}}},
-       /* /115 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xe0, 0x00}}},
-       /* /116 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xf0, 0x00}}},
-       /* /117 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xf8, 0x00}}},
-       /* /118 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xfc, 0x00}}},
-       /* /119 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xfe, 0x00}}},
-       /* /120 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0x00}}},
-       /* /121 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0x80}}},
-       /* /122 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xc0}}},
-       /* /123 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xe0}}},
-       /* /124 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xf0}}},
-       /* /125 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xf8}}},
-       /* /126 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xfc}}},
-       /* /127 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xfe}}},
-       /* /128 */
-       {{{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-          0xff, 0xff, 0xff, 0xff, 0xff}}}};
-
 /* Number of bits in prefix type. */
 #ifndef PNBBY
 #define PNBBY 8
@@ -432,15 +44,6 @@ static const struct in6_addr maskbytes6[] = {
 
 #define MASKBIT(offset)  ((0xff << (PNBBY - (offset))) & 0xff)
 
-void prefix_hexdump(const struct prefix *p)
-{
-       char buf[PREFIX_STRLEN];
-
-       zlog_debug("prefix: %s",
-                  prefix2str(p, buf, sizeof(buf)));
-       zlog_hexdump(p, sizeof(struct prefix));
-}
-
 int is_zero_mac(const struct ethaddr *mac)
 {
        int i = 0;
@@ -461,11 +64,6 @@ unsigned int prefix_bit(const uint8_t *prefix, const uint16_t prefixlen)
        return (prefix[offset] >> shift) & 1;
 }
 
-unsigned int prefix6_bit(const struct in6_addr *prefix, const uint16_t prefixlen)
-{
-       return prefix_bit((const uint8_t *)&prefix->s6_addr, prefixlen);
-}
-
 int str2family(const char *string)
 {
        if (!strcmp("ipv4", string))
@@ -1121,31 +719,46 @@ int str2prefix_ipv6(const char *str, struct prefix_ipv6 *p)
  * FIXME return uint8_t as ip_maskleni() does. */
 int ip6_masklen(struct in6_addr netmask)
 {
-       int len = 0;
-       unsigned char val;
-       unsigned char *pnt;
-
-       pnt = (unsigned char *)&netmask;
-
-       while ((*pnt == 0xff) && len < IPV6_MAX_BITLEN) {
-               len += 8;
-               pnt++;
-       }
-
-       if (len < IPV6_MAX_BITLEN) {
-               val = *pnt;
-               while (val) {
-                       len++;
-                       val <<= 1;
-               }
-       }
-       return len;
+       if (netmask.s6_addr32[0] != 0xffffffffU)
+               return __builtin_clz(~ntohl(netmask.s6_addr32[0]));
+       if (netmask.s6_addr32[1] != 0xffffffffU)
+               return __builtin_clz(~ntohl(netmask.s6_addr32[1])) + 32;
+       if (netmask.s6_addr32[2] != 0xffffffffU)
+               return __builtin_clz(~ntohl(netmask.s6_addr32[2])) + 64;
+       if (netmask.s6_addr32[3] != 0xffffffffU)
+               return __builtin_clz(~ntohl(netmask.s6_addr32[3])) + 96;
+       /* note __builtin_clz(0) is undefined */
+       return 128;
 }
 
 void masklen2ip6(const int masklen, struct in6_addr *netmask)
 {
        assert(masklen >= 0 && masklen <= IPV6_MAX_BITLEN);
-       memcpy(netmask, maskbytes6 + masklen, sizeof(struct in6_addr));
+
+       if (masklen == 0) {
+               /* note << 32 is undefined */
+               memset(netmask, 0, sizeof(*netmask));
+       } else if (masklen <= 32) {
+               netmask->s6_addr32[0] = htonl(0xffffffffU << (32 - masklen));
+               netmask->s6_addr32[1] = 0;
+               netmask->s6_addr32[2] = 0;
+               netmask->s6_addr32[3] = 0;
+       } else if (masklen <= 64) {
+               netmask->s6_addr32[0] = 0xffffffffU;
+               netmask->s6_addr32[1] = htonl(0xffffffffU << (64 - masklen));
+               netmask->s6_addr32[2] = 0;
+               netmask->s6_addr32[3] = 0;
+       } else if (masklen <= 96) {
+               netmask->s6_addr32[0] = 0xffffffffU;
+               netmask->s6_addr32[1] = 0xffffffffU;
+               netmask->s6_addr32[2] = htonl(0xffffffffU << (96 - masklen));
+               netmask->s6_addr32[3] = 0;
+       } else {
+               netmask->s6_addr32[0] = 0xffffffffU;
+               netmask->s6_addr32[1] = 0xffffffffU;
+               netmask->s6_addr32[2] = 0xffffffffU;
+               netmask->s6_addr32[3] = htonl(0xffffffffU << (128 - masklen));
+       }
 }
 
 void apply_mask_ipv6(struct prefix_ipv6 *p)
@@ -1183,33 +796,6 @@ void apply_mask(struct prefix *p)
        return;
 }
 
-/* Utility function of convert between struct prefix <=> union sockunion.
- * FIXME This function isn't used anywhere. */
-struct prefix *sockunion2prefix(const union sockunion *dest,
-                               const union sockunion *mask)
-{
-       if (dest->sa.sa_family == AF_INET) {
-               struct prefix_ipv4 *p;
-
-               p = prefix_ipv4_new();
-               p->family = AF_INET;
-               p->prefix = dest->sin.sin_addr;
-               p->prefixlen = ip_masklen(mask->sin.sin_addr);
-               return (struct prefix *)p;
-       }
-       if (dest->sa.sa_family == AF_INET6) {
-               struct prefix_ipv6 *p;
-
-               p = prefix_ipv6_new();
-               p->family = AF_INET6;
-               p->prefixlen = ip6_masklen(mask->sin6.sin6_addr);
-               memcpy(&p->prefix, &dest->sin6.sin6_addr,
-                      sizeof(struct in6_addr));
-               return (struct prefix *)p;
-       }
-       return NULL;
-}
-
 /* Utility function of convert between struct prefix <=> union sockunion. */
 struct prefix *sockunion2hostprefix(const union sockunion *su,
                                    struct prefix *prefix)
@@ -1521,14 +1107,6 @@ void apply_classful_mask_ipv4(struct prefix_ipv4 *p)
        }
 }
 
-in_addr_t ipv4_network_addr(in_addr_t hostaddr, int masklen)
-{
-       struct in_addr mask;
-
-       masklen2ip(masklen, &mask);
-       return hostaddr & mask.s_addr;
-}
-
 in_addr_t ipv4_broadcast_addr(in_addr_t hostaddr, int masklen)
 {
        struct in_addr mask;
index 7a93c766a329da16407d60c131dce136f3ea62eb..667627ddfe804aa10e8b577ffdf622ada2942a89 100644 (file)
@@ -392,8 +392,6 @@ extern const char *afi2str(afi_t afi);
 
 /* Check bit of the prefix. */
 extern unsigned int prefix_bit(const uint8_t *prefix, const uint16_t prefixlen);
-extern unsigned int prefix6_bit(const struct in6_addr *prefix,
-                               const uint16_t prefixlen);
 
 extern struct prefix *prefix_new(void);
 extern void prefix_free(struct prefix **p);
@@ -430,8 +428,6 @@ extern void apply_mask(struct prefix *);
 #define prefix_copy(a, b) ({ memset(a, 0, sizeof(*a)); prefix_copy(a, b); })
 #endif
 
-extern struct prefix *sockunion2prefix(const union sockunion *dest,
-                                      const union sockunion *mask);
 extern struct prefix *sockunion2hostprefix(const union sockunion *,
                                           struct prefix *p);
 extern void prefix2sockunion(const struct prefix *, union sockunion *);
@@ -453,8 +449,6 @@ extern void apply_classful_mask_ipv4(struct prefix_ipv4 *);
 
 extern uint8_t ip_masklen(struct in_addr);
 extern void masklen2ip(const int, struct in_addr *);
-/* returns the network portion of the host address */
-extern in_addr_t ipv4_network_addr(in_addr_t hostaddr, int masklen);
 /* given the address of a host on a network and the network mask length,
  * calculate the broadcast address for that network;
  * special treatment for /31: returns the address of the other host
@@ -484,7 +478,6 @@ extern unsigned prefix_hash_key(const void *pp);
 
 extern int str_to_esi(const char *str, esi_t *esi);
 extern char *esi_to_str(const esi_t *esi, char *buf, int size);
-extern void prefix_hexdump(const struct prefix *p);
 extern void prefix_evpn_hexdump(const struct prefix_evpn *p);
 
 static inline int ipv6_martian(struct in6_addr *addr)