#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include "igmp.h"
#include "dvmrpd.h"
#include "dvmrp.h"
#include "log.h"
#include "dvmrpe.h"
int
send_graft_ack(struct iface *iface, struct in_addr addr, void *data, int len)
{
struct sockaddr_in dst;
struct ibuf *buf;
int ret = 0;
log_debug("send_graft_ack: interface %s addr %s",
iface->name, inet_ntoa(addr));
if (iface->passive)
return (0);
if ((buf = ibuf_open(iface->mtu - sizeof(struct ip))) == NULL)
fatal("send_graft_ack");
if (gen_dvmrp_hdr(buf, iface, DVMRP_CODE_GRAFT_ACK))
goto fail;
dst.sin_family = AF_INET;
dst.sin_len = sizeof(struct sockaddr_in);
dst.sin_addr.s_addr = addr.s_addr;
ret = send_packet(iface, buf, &dst);
ibuf_free(buf);
return (ret);
fail:
log_warn("send_graft_ack");
ibuf_free(buf);
return (-1);
}
void
recv_graft_ack(struct nbr *nbr, char *buf, u_int16_t len)
{
log_debug("recv_graft_ack: neighbor ID %s", inet_ntoa(nbr->id));
return;
}