]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/prefix.c
Merge pull request #5806 from ton31337/fix/remove_break_after_return
[mirror_frr.git] / lib / prefix.c
index aa6661d7fb799a9a9aa9e01f46b863601e394cbd..2b7727fd0a3353479269903acb917f8adbfaa255 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;
@@ -453,6 +56,25 @@ int is_zero_mac(const struct ethaddr *mac)
        return 1;
 }
 
+bool is_bcast_mac(const struct ethaddr *mac)
+{
+       int i = 0;
+
+       for (i = 0; i < ETH_ALEN; i++)
+               if (mac->octet[i] != 0xFF)
+                       return false;
+
+       return true;
+}
+
+bool is_mcast_mac(const struct ethaddr *mac)
+{
+       if ((mac->octet[0] & 0x01) == 0x01)
+               return true;
+
+       return false;
+}
+
 unsigned int prefix_bit(const uint8_t *prefix, const uint16_t prefixlen)
 {
        unsigned int offset = prefixlen / 8;
@@ -461,11 +83,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))
@@ -601,6 +218,53 @@ int prefix_match(const struct prefix *n, const struct prefix *p)
                if (np[offset] != pp[offset])
                        return 0;
        return 1;
+
+}
+
+/*
+ * n is a type5 evpn prefix. This function tries to see if there is an
+ * ip-prefix within n which matches prefix p
+ * If n includes p prefix then return 1 else return 0.
+ */
+int evpn_type5_prefix_match(const struct prefix *n, const struct prefix *p)
+{
+       int offset;
+       int shift;
+       int prefixlen;
+       const uint8_t *np, *pp;
+       struct prefix_evpn *evp;
+
+       if (n->family != AF_EVPN)
+               return 0;
+
+       evp = (struct prefix_evpn *)n;
+       pp = p->u.val;
+
+       if ((evp->prefix.route_type != 5) ||
+           (p->family == AF_INET6 && !is_evpn_prefix_ipaddr_v6(evp)) ||
+           (p->family == AF_INET && !is_evpn_prefix_ipaddr_v4(evp)) ||
+           (is_evpn_prefix_ipaddr_none(evp)))
+               return 0;
+
+       prefixlen = evp->prefix.prefix_addr.ip_prefix_length;
+       np = &evp->prefix.prefix_addr.ip.ip.addr;
+
+       /* If n's prefix is longer than p's one return 0. */
+       if (prefixlen > p->prefixlen)
+               return 0;
+
+       offset = prefixlen / PNBBY;
+       shift = prefixlen % PNBBY;
+
+       if (shift)
+               if (maskbit[shift] & (np[offset] ^ pp[offset]))
+                       return 0;
+
+       while (offset--)
+               if (np[offset] != pp[offset])
+                       return 0;
+       return 1;
+
 }
 
 /* If n includes p then return 1 else return 0. Prefix mask is not considered */
@@ -858,9 +522,9 @@ struct prefix_ipv4 *prefix_ipv4_new(void)
 }
 
 /* Free prefix_ipv4 structure. */
-void prefix_ipv4_free(struct prefix_ipv4 *p)
+void prefix_ipv4_free(struct prefix_ipv4 **p)
 {
-       prefix_free((struct prefix *)p);
+       prefix_free((struct prefix **)p);
 }
 
 /* If given string is valid return 1 else return 0 */
@@ -1014,7 +678,7 @@ void apply_mask_ipv4(struct prefix_ipv4 *p)
 /* If prefix is 0.0.0.0/0 then return 1 else return 0. */
 int prefix_ipv4_any(const struct prefix_ipv4 *p)
 {
-       return (p->prefix.s_addr == 0 && p->prefixlen == 0);
+       return (p->prefix.s_addr == INADDR_ANY && p->prefixlen == 0);
 }
 
 /* Allocate a new ip version 6 route */
@@ -1030,9 +694,9 @@ struct prefix_ipv6 *prefix_ipv6_new(void)
 }
 
 /* Free prefix for IPv6. */
-void prefix_ipv6_free(struct prefix_ipv6 *p)
+void prefix_ipv6_free(struct prefix_ipv6 **p)
 {
-       prefix_free((struct prefix *)p);
+       prefix_free((struct prefix **)p);
 }
 
 /* If given string is valid return 1 else return 0 */
@@ -1074,31 +738,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)
@@ -1136,33 +815,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)
@@ -1206,13 +858,10 @@ int prefix_blen(const struct prefix *p)
        switch (p->family) {
        case AF_INET:
                return IPV4_MAX_BYTELEN;
-               break;
        case AF_INET6:
                return IPV6_MAX_BYTELEN;
-               break;
        case AF_ETHERNET:
                return ETH_ALEN;
-               break;
        }
        return 0;
 }
@@ -1437,10 +1086,17 @@ struct prefix *prefix_new(void)
        return p;
 }
 
+void prefix_free_lists(void *arg)
+{
+       struct prefix *p = arg;
+
+       prefix_free(&p);
+}
+
 /* Free prefix structure. */
-void prefix_free(struct prefix *p)
+void prefix_free(struct prefix **p)
 {
-       XFREE(MTYPE_PREFIX, p);
+       XFREE(MTYPE_PREFIX, *p);
 }
 
 /* Utility function to convert ipv4 prefixes to Classful prefixes */
@@ -1466,25 +1122,17 @@ 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;
 
        masklen2ip(masklen, &mask);
        return (masklen != IPV4_MAX_PREFIXLEN - 1) ?
-                                                  /* normal case */
-                      (hostaddr | ~mask.s_addr)
-                                                  :
-                                                  /* special case for /31 */
-                      (hostaddr ^ ~mask.s_addr);
+               /* normal case */
+               (hostaddr | ~mask.s_addr)
+                  :
+               /* For prefix 31 return 255.255.255.255 (RFC3021) */
+               htonl(0xFFFFFFFF);
 }
 
 /* Utility function to convert ipv4 netmask to prefixes
@@ -1512,7 +1160,7 @@ int netmask_str2prefix_str(const char *net_str, const char *mask_str,
        } else {
                destination = ntohl(network.s_addr);
 
-               if (network.s_addr == 0)
+               if (network.s_addr == INADDR_ANY)
                        prefixlen = 0;
                else if (IN_CLASSC(destination))
                        prefixlen = 24;