summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/filter.c123
-rw-r--r--lib/if.c2
-rw-r--r--lib/ptm_lib.c2
-rw-r--r--lib/thread.c2
-rw-r--r--lib/vty.c2
-rw-r--r--lib/zclient.c8
-rw-r--r--pimd/pim_cmd.c10
-rw-r--r--pimd/pim_register.c6
-rw-r--r--pimd/pim_sock.c1
-rw-r--r--ripd/rip_interface.c30
-rw-r--r--zebra/zserv.c4
11 files changed, 80 insertions, 110 deletions
diff --git a/lib/filter.c b/lib/filter.c
index 46e0bbe804..2b9ba87137 100644
--- a/lib/filter.c
+++ b/lib/filter.c
@@ -1335,25 +1335,9 @@ filter_set_zebra (struct vty *vty, const char *name_str, const char *type_str,
return CMD_SUCCESS;
}
-/* Zebra access-list */
-DEFUN (access_list,
- access_list_cmd,
- "access-list WORD <deny|permit> A.B.C.D/M",
- "Add an access list entry\n"
- "IP zebra access-list name\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "Prefix to match. e.g. 10.0.0.0/8\n")
-{
- int idx_word = 1;
- int idx_permit_deny = 2;
- int idx_ipv4_prefixlen = 3;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, argv[idx_ipv4_prefixlen]->arg, 0, 1);
-}
-
DEFUN (access_list_exact,
access_list_exact_cmd,
- "access-list WORD <deny|permit> A.B.C.D/M exact-match",
+ "access-list WORD <deny|permit> A.B.C.D/M [exact-match]",
"Add an access list entry\n"
"IP zebra access-list name\n"
"Specify packets to reject\n"
@@ -1361,10 +1345,18 @@ DEFUN (access_list_exact,
"Prefix to match. e.g. 10.0.0.0/8\n"
"Exact match of the prefixes\n")
{
+ int idx;
+ int exact = 0;
int idx_word = 1;
int idx_permit_deny = 2;
int idx_ipv4_prefixlen = 3;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, argv[idx_ipv4_prefixlen]->arg, 1, 1);
+ idx = idx_ipv4_prefixlen;
+
+ if (argv_find (argv, argc, "exact-match", &idx))
+ exact = 1;
+
+ return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg,
+ AFI_IP, argv[idx_ipv4_prefixlen]->arg, exact, 1);
}
DEFUN (access_list_any,
@@ -1381,25 +1373,9 @@ DEFUN (access_list_any,
return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, "0.0.0.0/0", 0, 1);
}
-DEFUN (no_access_list,
- no_access_list_cmd,
- "no access-list WORD <deny|permit> A.B.C.D/M",
- NO_STR
- "Add an access list entry\n"
- "IP zebra access-list name\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "Prefix to match. e.g. 10.0.0.0/8\n")
-{
- int idx_word = 2;
- int idx_permit_deny = 3;
- int idx_ipv4_prefixlen = 4;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, argv[idx_ipv4_prefixlen]->arg, 0, 0);
-}
-
DEFUN (no_access_list_exact,
no_access_list_exact_cmd,
- "no access-list WORD <deny|permit> A.B.C.D/M exact-match",
+ "no access-list WORD <deny|permit> A.B.C.D/M [exact-match]",
NO_STR
"Add an access list entry\n"
"IP zebra access-list name\n"
@@ -1408,10 +1384,17 @@ DEFUN (no_access_list_exact,
"Prefix to match. e.g. 10.0.0.0/8\n"
"Exact match of the prefixes\n")
{
+ int idx;
+ int exact = 0;
int idx_word = 2;
int idx_permit_deny = 3;
int idx_ipv4_prefixlen = 4;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, argv[idx_ipv4_prefixlen]->arg, 1, 0);
+ idx = idx_ipv4_prefixlen;
+
+ if (argv_find (argv, argc, "exact-match", &idx))
+ exact = 1;
+
+ return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP, argv[idx_ipv4_prefixlen]->arg, exact, 0);
}
DEFUN (no_access_list_any,
@@ -1526,27 +1509,10 @@ DEFUN (no_access_list_remark_comment,
{
return no_access_list_remark (self, vty, argc, argv);
}
-
-
-DEFUN (ipv6_access_list,
- ipv6_access_list_cmd,
- "ipv6 access-list WORD <deny|permit> X:X::X:X/M",
- IPV6_STR
- "Add an access list entry\n"
- "IPv6 zebra access-list\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "IPv6 prefix\n")
-{
- int idx = 0;
- char *alname = argv_find (argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
- char *prefix = argv_find (argv, argc, "X:X::X:X/M", &idx) ? argv[idx]->arg : NULL;
- return filter_set_zebra (vty, alname, argv[3]->text, AFI_IP6, prefix, 0, 1);
-}
DEFUN (ipv6_access_list_exact,
ipv6_access_list_exact_cmd,
- "ipv6 access-list WORD <deny|permit> X:X::X:X/M exact-match",
+ "ipv6 access-list WORD <deny|permit> X:X::X:X/M [exact-match]",
IPV6_STR
"Add an access list entry\n"
"IPv6 zebra access-list\n"
@@ -1555,10 +1521,18 @@ DEFUN (ipv6_access_list_exact,
"IPv6 prefix\n"
"Exact match of the prefixes\n")
{
- int idx = 0;
- char *alname = argv_find (argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
- char *prefix = argv_find (argv, argc, "X:X::X:X/M", &idx) ? argv[idx]->arg : NULL;
- return filter_set_zebra (vty, alname, argv[3]->text, AFI_IP6, prefix, 1, 1);
+ int idx;
+ int exact = 0;
+ int idx_word = 2;
+ int idx_allow = 3;
+ int idx_addr = 4;
+ idx = idx_addr;
+
+ if (argv_find (argv, argc, "exact-match", &idx))
+ exact = 1;
+
+ return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_allow]->text,
+ AFI_IP6, argv[idx_addr]->arg, exact, 1);
}
DEFUN (ipv6_access_list_any,
@@ -1576,26 +1550,9 @@ DEFUN (ipv6_access_list_any,
return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP6, "::/0", 0, 1);
}
-DEFUN (no_ipv6_access_list,
- no_ipv6_access_list_cmd,
- "no ipv6 access-list WORD <deny|permit> X:X::X:X/M",
- NO_STR
- IPV6_STR
- "Add an access list entry\n"
- "IPv6 zebra access-list\n"
- "Specify packets to reject\n"
- "Specify packets to forward\n"
- "Prefix to match. e.g. 3ffe:506::/32\n")
-{
- int idx_word = 3;
- int idx_permit_deny = 4;
- int idx_ipv6_prefixlen = 5;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP6, argv[idx_ipv6_prefixlen]->arg, 0, 0);
-}
-
DEFUN (no_ipv6_access_list_exact,
no_ipv6_access_list_exact_cmd,
- "no ipv6 access-list WORD <deny|permit> X:X::X:X/M exact-match",
+ "no ipv6 access-list WORD <deny|permit> X:X::X:X/M [exact-match]",
NO_STR
IPV6_STR
"Add an access list entry\n"
@@ -1605,10 +1562,18 @@ DEFUN (no_ipv6_access_list_exact,
"Prefix to match. e.g. 3ffe:506::/32\n"
"Exact match of the prefixes\n")
{
+ int idx;
+ int exact = 0;
int idx_word = 3;
int idx_permit_deny = 4;
int idx_ipv6_prefixlen = 5;
- return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg, AFI_IP6, argv[idx_ipv6_prefixlen]->arg, 1, 0);
+ idx = idx_ipv6_prefixlen;
+
+ if (argv_find (argv, argc, "exact-match", &idx))
+ exact = 1;
+
+ return filter_set_zebra (vty, argv[idx_word]->arg, argv[idx_permit_deny]->arg,
+ AFI_IP6, argv[idx_ipv6_prefixlen]->arg, exact, 0);
}
DEFUN (no_ipv6_access_list_any,
@@ -2059,10 +2024,8 @@ access_list_init_ipv4 (void)
install_element (ENABLE_NODE, &show_ip_access_list_name_cmd);
/* Zebra access-list */
- install_element (CONFIG_NODE, &access_list_cmd);
install_element (CONFIG_NODE, &access_list_exact_cmd);
install_element (CONFIG_NODE, &access_list_any_cmd);
- install_element (CONFIG_NODE, &no_access_list_cmd);
install_element (CONFIG_NODE, &no_access_list_exact_cmd);
install_element (CONFIG_NODE, &no_access_list_any_cmd);
@@ -2152,11 +2115,9 @@ access_list_init_ipv6 (void)
install_element (ENABLE_NODE, &show_ipv6_access_list_cmd);
install_element (ENABLE_NODE, &show_ipv6_access_list_name_cmd);
- install_element (CONFIG_NODE, &ipv6_access_list_cmd);
install_element (CONFIG_NODE, &ipv6_access_list_exact_cmd);
install_element (CONFIG_NODE, &ipv6_access_list_any_cmd);
install_element (CONFIG_NODE, &no_ipv6_access_list_exact_cmd);
- install_element (CONFIG_NODE, &no_ipv6_access_list_cmd);
install_element (CONFIG_NODE, &no_ipv6_access_list_any_cmd);
install_element (CONFIG_NODE, &no_ipv6_access_list_all_cmd);
diff --git a/lib/if.c b/lib/if.c
index 20f792b8f8..6ee84e126c 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -374,7 +374,7 @@ if_lookup_exact_address_vrf (void *src, int family, vrf_id_t vrf_id)
}
else if (family == AF_INET6)
{
- if (IPV6_ADDR_SAME (&p->u.prefix4, (struct in6_addr *)src))
+ if (IPV6_ADDR_SAME (&p->u.prefix6, (struct in6_addr *)src))
return ifp;
}
}
diff --git a/lib/ptm_lib.c b/lib/ptm_lib.c
index 0666797fad..a93d7b8476 100644
--- a/lib/ptm_lib.c
+++ b/lib/ptm_lib.c
@@ -458,7 +458,7 @@ ptm_lib_register(char *client_name,
hdl = calloc(1, sizeof(*hdl));
if (hdl) {
- strcpy(hdl->client_name, client_name);
+ strncpy(hdl->client_name, client_name, PTMLIB_MAXNAMELEN - 1);
hdl->cmd_cb = cmd_cb;
hdl->notify_cb = notify_cb;
hdl->response_cb = response_cb;
diff --git a/lib/thread.c b/lib/thread.c
index de7066bb82..28245d11a2 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -719,7 +719,7 @@ funcname_thread_add_read_write (int dir, struct thread_master *m,
#else
if (FD_ISSET (fd, fdset))
{
- zlog (NULL, LOG_WARNING, "There is already %s fd [%d]", (dir = THREAD_READ) ? "read" : "write", fd);
+ zlog (NULL, LOG_WARNING, "There is already %s fd [%d]", (dir == THREAD_READ) ? "read" : "write", fd);
return NULL;
}
diff --git a/lib/vty.c b/lib/vty.c
index b6f493b6c9..2660ca3251 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -2230,7 +2230,7 @@ void
vty_close (struct vty *vty)
{
int i;
- bool was_stdio;
+ bool was_stdio = false;
/* Cancel threads.*/
if (vty->t_read)
diff --git a/lib/zclient.c b/lib/zclient.c
index 92662fd70f..cea4b098fc 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -1146,11 +1146,15 @@ struct interface *
zebra_interface_link_params_read (struct stream *s)
{
struct if_link_params *iflp;
- uint32_t ifindex = stream_getl (s);
+ ifindex_t ifindex;
+
+ assert (s);
+
+ ifindex = stream_getl (s);
struct interface *ifp = if_lookup_by_index (ifindex);
- if (ifp == NULL || s == NULL)
+ if (ifp == NULL)
{
zlog_err ("%s: unknown ifindex %u, shouldn't happen",
__func__, ifindex);
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index 7e85253f9a..7f276b22ce 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -1374,8 +1374,8 @@ pim_show_state(struct vty *vty, const char *src_or_group, const char *group, u_c
for (ALL_LIST_ELEMENTS_RO(pim_channel_oil_list, node, c_oil)) {
char grp_str[INET_ADDRSTRLEN];
char src_str[INET_ADDRSTRLEN];
- char in_ifname[16];
- char out_ifname[16];
+ char in_ifname[INTERFACE_NAMSIZ+1];
+ char out_ifname[INTERFACE_NAMSIZ+1];
int oif_vif_index;
struct interface *ifp_in;
first_oif = 1;
@@ -3036,8 +3036,8 @@ static void show_mroute(struct vty *vty, u_char uj)
for (ALL_LIST_ELEMENTS_RO(qpim_static_route_list, node, s_route)) {
char grp_str[INET_ADDRSTRLEN];
char src_str[INET_ADDRSTRLEN];
- char in_ifname[16];
- char out_ifname[16];
+ char in_ifname[INTERFACE_NAMSIZ+1];
+ char out_ifname[INTERFACE_NAMSIZ+1];
int oif_vif_index;
struct interface *ifp_in;
char proto[100];
@@ -4871,7 +4871,7 @@ DEFUN (debug_pim_packets,
DEBUG_PIM_J_P_PACKETS_STR
DEBUG_PIM_PIM_REG_PACKETS_STR)
{
- int idx;
+ int idx = 0;
if (argv_find (argv, argc, "hello", &idx))
{
PIM_DO_DEBUG_PIM_HELLO;
diff --git a/pimd/pim_register.c b/pimd/pim_register.c
index 490a05be37..29b4e8a63b 100644
--- a/pimd/pim_register.c
+++ b/pimd/pim_register.c
@@ -132,6 +132,7 @@ pim_register_stop_recv (uint8_t *buf, int buf_size)
upstream->join_state = PIM_UPSTREAM_PRUNE;
pim_channel_del_oif (upstream->channel_oil, pim_regiface, PIM_OIF_FLAG_PROTO_PIM);
pim_upstream_start_register_stop_timer (upstream, 0);
+ break;
case PIM_UPSTREAM_JOIN_PENDING:
upstream->join_state = PIM_UPSTREAM_PRUNE;
pim_upstream_start_register_stop_timer (upstream, 0);
@@ -152,10 +153,9 @@ pim_register_send (const uint8_t *buf, int buf_size, struct in_addr src, struct
if (PIM_DEBUG_PIM_REG)
{
- char rp_str[INET_ADDRSTRLEN];
- strcpy (rp_str, inet_ntoa (rpg->rpf_addr.u.prefix4));
zlog_debug ("Sending %s %sRegister Packet to %s",
- up->sg_str, null_register ? "NULL " : "", rp_str);
+ up->sg_str, null_register ? "NULL " : "",
+ inet_ntoa (rpg->rpf_addr.u.prefix4));
}
ifp = rpg->source_nexthop.interface;
diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c
index 11cd61b592..df0095d29e 100644
--- a/pimd/pim_sock.c
+++ b/pimd/pim_sock.c
@@ -139,6 +139,7 @@ int pim_socket_mcast(int protocol, struct in_addr ifaddr, int ifindex, u_char lo
ret = pim_socket_bind (fd, ifp);
if (ret)
{
+ close (fd);
zlog_warn("Could not set fd: %d for interface: %s to device",
fd, ifp->name);
return PIM_SOCK_ERR_BIND;
diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index 9f8b279eb8..772ba49f93 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -585,24 +585,26 @@ rip_if_down(struct interface *ifp)
struct list *list = NULL;
struct listnode *listnode = NULL, *nextnode = NULL;
if (rip)
- for (rp = route_top (rip->table); rp; rp = route_next (rp))
- if ((list = rp->info) != NULL)
- for (ALL_LIST_ELEMENTS (list, listnode, nextnode, rinfo))
- if (rinfo->ifindex == ifp->ifindex)
- rip_ecmp_delete (rinfo);
+ {
+ for (rp = route_top (rip->table); rp; rp = route_next (rp))
+ if ((list = rp->info) != NULL)
+ for (ALL_LIST_ELEMENTS (list, listnode, nextnode, rinfo))
+ if (rinfo->ifindex == ifp->ifindex)
+ rip_ecmp_delete (rinfo);
- ri = ifp->info;
+ ri = ifp->info;
- if (ri->running)
- {
- if (IS_RIP_DEBUG_EVENT)
- zlog_debug ("turn off %s", ifp->name);
+ if (ri->running)
+ {
+ if (IS_RIP_DEBUG_EVENT)
+ zlog_debug ("turn off %s", ifp->name);
- /* Leave from multicast group. */
- rip_multicast_leave (ifp, rip->sock);
+ /* Leave from multicast group. */
+ rip_multicast_leave (ifp, rip->sock);
- ri->running = 0;
- }
+ ri->running = 0;
+ }
+ }
return 0;
}
diff --git a/zebra/zserv.c b/zebra/zserv.c
index 6d53c00b29..37c048f627 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -92,6 +92,7 @@ zserv_flush_data(struct thread *thread)
zlog_warn("%s: buffer_flush_available failed on zserv client fd %d, "
"closing", __func__, client->sock);
zebra_client_close(client);
+ client = NULL;
break;
case BUFFER_PENDING:
client->t_write = thread_add_write(zebrad.master, zserv_flush_data,
@@ -101,7 +102,8 @@ zserv_flush_data(struct thread *thread)
break;
}
- client->last_write_time = monotime(NULL);
+ if (client)
+ client->last_write_time = monotime(NULL);
return 0;
}