usr.sbin/rad/frontend.c
1003
free_ra_iface(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
1007
leave_all_routers_mcast_group(ra_iface);
usr.sbin/rad/frontend.c
1009
while ((prefix = SIMPLEQ_FIRST(&ra_iface->prefixes)) != NULL) {
usr.sbin/rad/frontend.c
1010
SIMPLEQ_REMOVE_HEAD(&ra_iface->prefixes, entry);
usr.sbin/rad/frontend.c
1014
unref_icmp6ev(ra_iface);
usr.sbin/rad/frontend.c
1015
free(ra_iface);
usr.sbin/rad/frontend.c
102
TAILQ_ENTRY(ra_iface) entry;
usr.sbin/rad/frontend.c
1044
get_interface_prefixes(struct ra_iface *ra_iface, struct ra_prefix_conf
usr.sbin/rad/frontend.c
1058
if (strcmp(ra_iface->name, ifa->ifa_name) != 0)
usr.sbin/rad/frontend.c
1067
strlcpy(ifr6.ifr_name, ra_iface->name, sizeof(ifr6.ifr_name));
usr.sbin/rad/frontend.c
1085
strlcpy(ifr6.ifr_name, ra_iface->name, sizeof(ifr6.ifr_name));
usr.sbin/rad/frontend.c
1099
add_new_prefix_to_ra_iface(ra_iface, &sin6->sin6_addr,
usr.sbin/rad/frontend.c
1120
add_new_prefix_to_ra_iface(struct ra_iface *ra_iface, struct in6_addr *addr,
usr.sbin/rad/frontend.c
1126
if ((new_ra_prefix_conf = find_ra_prefix_conf(&ra_iface->prefixes, addr,
usr.sbin/rad/frontend.c
1137
ra_iface->has_autoconf_prefix = 0;
usr.sbin/rad/frontend.c
1138
SIMPLEQ_FOREACH(pc, &ra_iface->prefixes, entry) {
usr.sbin/rad/frontend.c
1140
ra_iface->has_autoconf_prefix = 1;
usr.sbin/rad/frontend.c
1158
ra_iface->has_autoconf_prefix = 1;
usr.sbin/rad/frontend.c
1163
SIMPLEQ_INSERT_TAIL(&ra_iface->prefixes, new_ra_prefix_conf, entry);
usr.sbin/rad/frontend.c
1164
ra_iface->prefix_count++;
usr.sbin/rad/frontend.c
1187
build_packet(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
1209
ra_iface->conf_name);
usr.sbin/rad/frontend.c
1217
len += sizeof(*ndopt_pi) * ra_iface->prefix_count;
usr.sbin/rad/frontend.c
1232
if (len > sizeof(ra_iface->data))
usr.sbin/rad/frontend.c
1247
if (ra_iface->removed)
usr.sbin/rad/frontend.c
1272
&ra_iface->hw_addr, ETHER_ADDR_LEN);
usr.sbin/rad/frontend.c
1285
SIMPLEQ_FOREACH(ra_prefix_conf, &ra_iface->prefixes, entry) {
usr.sbin/rad/frontend.c
132
TAILQ_HEAD(, ra_iface) ra_interfaces;
usr.sbin/rad/frontend.c
138
void join_all_routers_mcast_group(struct ra_iface *);
usr.sbin/rad/frontend.c
139
void leave_all_routers_mcast_group(struct ra_iface *);
usr.sbin/rad/frontend.c
1399
if (len != ra_iface->datalen || memcmp(buf, ra_iface->data, len)
usr.sbin/rad/frontend.c
1401
memcpy(ra_iface->data, buf, len);
usr.sbin/rad/frontend.c
1402
ra_iface->datalen = len;
usr.sbin/rad/frontend.c
1409
build_leaving_packet(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
1417
memcpy(ra_iface->data, &ra, sizeof(ra));
usr.sbin/rad/frontend.c
1418
ra_iface->datalen = sizeof(ra);
usr.sbin/rad/frontend.c
1422
ra_output(struct ra_iface *ra_iface, struct sockaddr_in6 *to)
usr.sbin/rad/frontend.c
143
struct ra_iface *find_ra_iface_by_id(uint32_t);
usr.sbin/rad/frontend.c
1430
if (!LINK_STATE_IS_UP(ra_iface->link_state))
usr.sbin/rad/frontend.c
1433
if (ra_iface->has_autoconf_prefix)
usr.sbin/rad/frontend.c
1435
build_packet(ra_iface);
usr.sbin/rad/frontend.c
1438
sndmhdr.msg_iov[0].iov_base = ra_iface->data;
usr.sbin/rad/frontend.c
1439
sndmhdr.msg_iov[0].iov_len = ra_iface->datalen;
usr.sbin/rad/frontend.c
144
struct ra_iface *find_ra_iface_by_name(char *);
usr.sbin/rad/frontend.c
1448
pi->ipi6_ifindex = ra_iface->if_index;
usr.sbin/rad/frontend.c
1457
log_debug("send RA on %s", ra_iface->name);
usr.sbin/rad/frontend.c
1459
len = sendmsg(EVENT_FD(&ra_iface->icmp6ev->ev), &sndmhdr, 0);
usr.sbin/rad/frontend.c
1461
log_warn("sendmsg on %s", ra_iface->name);
usr.sbin/rad/frontend.c
150
void unref_icmp6ev(struct ra_iface *);
usr.sbin/rad/frontend.c
152
void add_new_prefix_to_ra_iface(struct ra_iface *r,
usr.sbin/rad/frontend.c
1545
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
1548
TAILQ_FOREACH (ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
1549
if (ra_iface->rdomain == rdomain) {
usr.sbin/rad/frontend.c
155
void free_ra_iface(struct ra_iface *);
usr.sbin/rad/frontend.c
1550
icmp6ev = ra_iface->icmp6ev;
usr.sbin/rad/frontend.c
157
void get_interface_prefixes(struct ra_iface *,
usr.sbin/rad/frontend.c
1580
unref_icmp6ev(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
1582
struct icmp6_ev *icmp6ev = ra_iface->icmp6ev;
usr.sbin/rad/frontend.c
1584
ra_iface->icmp6ev = NULL;
usr.sbin/rad/frontend.c
1599
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
160
int build_packet(struct ra_iface *);
usr.sbin/rad/frontend.c
1601
TAILQ_FOREACH (ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
1602
if (!event_initialized(&ra_iface->icmp6ev->ev) &&
usr.sbin/rad/frontend.c
1603
ra_iface->rdomain == rdomain) {
usr.sbin/rad/frontend.c
1604
event_set(&ra_iface->icmp6ev->ev, icmp6sock, EV_READ |
usr.sbin/rad/frontend.c
1605
EV_PERSIST, icmp6_receive, ra_iface->icmp6ev);
usr.sbin/rad/frontend.c
1606
event_add(&ra_iface->icmp6ev->ev, NULL);
usr.sbin/rad/frontend.c
161
void build_leaving_packet(struct ra_iface *);
usr.sbin/rad/frontend.c
162
void ra_output(struct ra_iface *, struct sockaddr_in6 *);
usr.sbin/rad/frontend.c
1621
TAILQ_FOREACH (ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
1622
if (ra_iface->rdomain == rdomain) {
usr.sbin/rad/frontend.c
1623
join_all_routers_mcast_group(ra_iface);
usr.sbin/rad/frontend.c
1625
&ra_iface->if_index, sizeof(ra_iface->if_index));
usr.sbin/rad/frontend.c
544
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
575
ra_iface = find_ra_iface_by_id(send_ra.if_index);
usr.sbin/rad/frontend.c
576
if (ra_iface)
usr.sbin/rad/frontend.c
577
ra_output(ra_iface, &send_ra.to);
usr.sbin/rad/frontend.c
584
ra_iface = find_ra_iface_by_id(if_index);
usr.sbin/rad/frontend.c
585
if (ra_iface) {
usr.sbin/rad/frontend.c
586
TAILQ_REMOVE(&ra_interfaces, ra_iface, entry);
usr.sbin/rad/frontend.c
587
free_ra_iface(ra_iface);
usr.sbin/rad/frontend.c
698
join_all_routers_mcast_group(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
700
if (!event_initialized(&ra_iface->icmp6ev->ev))
usr.sbin/rad/frontend.c
702
log_debug("joining multicast group on %s", ra_iface->name);
usr.sbin/rad/frontend.c
703
all_routers.ipv6mr_interface = ra_iface->if_index;
usr.sbin/rad/frontend.c
704
if (setsockopt(EVENT_FD(&ra_iface->icmp6ev->ev), IPPROTO_IPV6,
usr.sbin/rad/frontend.c
706
fatal("IPV6_JOIN_GROUP(%s)", ra_iface->name);
usr.sbin/rad/frontend.c
710
leave_all_routers_mcast_group(struct ra_iface *ra_iface)
usr.sbin/rad/frontend.c
712
if (!event_initialized(&ra_iface->icmp6ev->ev))
usr.sbin/rad/frontend.c
714
log_debug("leaving multicast group on %s", ra_iface->name);
usr.sbin/rad/frontend.c
715
all_routers.ipv6mr_interface = ra_iface->if_index;
usr.sbin/rad/frontend.c
716
setsockopt(EVENT_FD(&ra_iface->icmp6ev->ev), IPPROTO_IPV6,
usr.sbin/rad/frontend.c
720
struct ra_iface*
usr.sbin/rad/frontend.c
723
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
725
TAILQ_FOREACH(ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
726
if (ra_iface->if_index == if_index)
usr.sbin/rad/frontend.c
727
return ra_iface;
usr.sbin/rad/frontend.c
732
struct ra_iface*
usr.sbin/rad/frontend.c
735
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
737
TAILQ_FOREACH(ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
738
if (strcmp(ra_iface->name, if_name) == 0)
usr.sbin/rad/frontend.c
739
return ra_iface;
usr.sbin/rad/frontend.c
772
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
826
if ((ra_iface = find_ra_iface_by_name(if_name)) != NULL) {
usr.sbin/rad/frontend.c
827
ra_iface->link_state = link_state;
usr.sbin/rad/frontend.c
830
ra_iface->removed = 1;
usr.sbin/rad/frontend.c
834
ra_iface->removed = 1;
usr.sbin/rad/frontend.c
837
ra_iface->removed = 1;
usr.sbin/rad/frontend.c
840
ra_iface->removed = 1;
usr.sbin/rad/frontend.c
841
} else if (ra_iface->rdomain != ifrdomain) {
usr.sbin/rad/frontend.c
842
leave_all_routers_mcast_group(ra_iface);
usr.sbin/rad/frontend.c
843
unref_icmp6ev(ra_iface);
usr.sbin/rad/frontend.c
844
ra_iface->rdomain = ifrdomain;
usr.sbin/rad/frontend.c
845
ra_iface->icmp6ev = get_icmp6ev_by_rdomain(ifrdomain);
usr.sbin/rad/frontend.c
846
join_all_routers_mcast_group(ra_iface);
usr.sbin/rad/frontend.c
847
ra_iface->removed = 0;
usr.sbin/rad/frontend.c
850
ra_iface->removed = 0;
usr.sbin/rad/frontend.c
852
memcpy(&ra_iface->hw_addr, &hw_addr, sizeof(hw_addr));
usr.sbin/rad/frontend.c
882
if ((ra_iface = calloc(1, sizeof(*ra_iface))) == NULL)
usr.sbin/rad/frontend.c
885
strlcpy(ra_iface->name, if_name, sizeof(ra_iface->name));
usr.sbin/rad/frontend.c
886
strlcpy(ra_iface->conf_name, conf_name,
usr.sbin/rad/frontend.c
887
sizeof(ra_iface->conf_name));
usr.sbin/rad/frontend.c
889
ra_iface->if_index = if_index;
usr.sbin/rad/frontend.c
890
ra_iface->rdomain = ifrdomain;
usr.sbin/rad/frontend.c
891
memcpy(&ra_iface->hw_addr, &hw_addr, sizeof(hw_addr));
usr.sbin/rad/frontend.c
892
SIMPLEQ_INIT(&ra_iface->prefixes);
usr.sbin/rad/frontend.c
894
ra_iface->icmp6ev = get_icmp6ev_by_rdomain(ifrdomain);
usr.sbin/rad/frontend.c
895
join_all_routers_mcast_group(ra_iface);
usr.sbin/rad/frontend.c
896
TAILQ_INSERT_TAIL(&ra_interfaces, ra_iface, entry);
usr.sbin/rad/frontend.c
904
struct ra_iface *ra_iface;
usr.sbin/rad/frontend.c
916
TAILQ_FOREACH(ra_iface, &ra_interfaces, entry)
usr.sbin/rad/frontend.c
917
ra_iface->removed = 1;
usr.sbin/rad/frontend.c
957
TAILQ_FOREACH(ra_iface, &ra_interfaces, entry) {
usr.sbin/rad/frontend.c
958
while ((ra_prefix_conf = SIMPLEQ_FIRST(&ra_iface->prefixes))
usr.sbin/rad/frontend.c
960
SIMPLEQ_REMOVE_HEAD(&ra_iface->prefixes,
usr.sbin/rad/frontend.c
964
ra_iface->prefix_count = 0;
usr.sbin/rad/frontend.c
966
if (ra_iface->removed) {
usr.sbin/rad/frontend.c
967
log_debug("iface removed: %s", ra_iface->name);
usr.sbin/rad/frontend.c
968
build_leaving_packet(ra_iface);
usr.sbin/rad/frontend.c
970
&ra_iface->if_index, sizeof(ra_iface->if_index));
usr.sbin/rad/frontend.c
975
&frontend_conf->ra_iface_list, ra_iface->conf_name);
usr.sbin/rad/frontend.c
977
log_debug("add static prefixes for %s", ra_iface->name);
usr.sbin/rad/frontend.c
981
add_new_prefix_to_ra_iface(ra_iface,
usr.sbin/rad/frontend.c
988
get_interface_prefixes(ra_iface,
usr.sbin/rad/frontend.c
991
if (build_packet(ra_iface)) {
usr.sbin/rad/frontend.c
993
if (event_initialized(&ra_iface->icmp6ev->ev))
usr.sbin/rad/frontend.c
995
&ra_iface->if_index,
usr.sbin/rad/frontend.c
996
sizeof(ra_iface->if_index));
usr.sbin/rad/parse.y
139
| grammar ra_iface '\n'
usr.sbin/rad/parse.y
291
ra_iface : RA_IFACE STRING {