]>
git.proxmox.com Git - mirror_frr.git/blob - bgpd/bgp_regex.c
1 /* AS regular expression routine
2 * Copyright (C) 1999 Kunihiro Ishiguro
4 * This file is part of GNU Zebra.
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "bgp_aspath.h"
31 #include "bgp_regex.h"
33 /* Character `_' has special mean. It represents [,{}() ] and the
34 beginning of the line(^) and the end of the line ($).
38 regex_t
*bgp_regcomp(const char *regstr
)
40 /* Convert _ character to generic regular expression. */
45 char magic_regexp
[] = "(^|[,{}() ]|$)";
50 for (i
= 0; i
< len
; i
++)
54 magic_str
= XMALLOC(MTYPE_TMP
, len
+ (14 * magic
) + 1);
56 for (i
= 0, j
= 0; i
< len
; i
++) {
57 if (regstr
[i
] == '_') {
58 memcpy(magic_str
+ j
, magic_regexp
,
59 strlen(magic_regexp
));
60 j
+= strlen(magic_regexp
);
62 magic_str
[j
++] = regstr
[i
];
66 regex
= XMALLOC(MTYPE_BGP_REGEXP
, sizeof(regex_t
));
68 ret
= regcomp(regex
, magic_str
, REG_EXTENDED
| REG_NOSUB
);
70 XFREE(MTYPE_TMP
, magic_str
);
73 XFREE(MTYPE_BGP_REGEXP
, regex
);
80 int bgp_regexec(regex_t
*regex
, struct aspath
*aspath
)
82 return regexec(regex
, aspath
->str
, 0, NULL
, 0);
85 void bgp_regex_free(regex_t
*regex
)
88 XFREE(MTYPE_BGP_REGEXP
, regex
);