1925 bcopy(ra, raq->raq_packet, len);
1926 raq->raq_packetlen = len;
1927 raq->raq_pi = pi;
1928
1929 /* Tail insert */
1930 raqp = &raq_head;
1931 while (*raqp != NULL)
1932 raqp = &((*raqp)->raq_next);
1933 *raqp = raq;
1934
1935 /* Signal for poll loop */
1936 sig_handler(255);
1937 }
1938
1939 /*
1940 * Dequeue and process all queued advertisements.
1941 */
1942 static void
1943 loopback_ra_dequeue(void)
1944 {
1945 struct sockaddr_in6 from = IN6ADDR_LOOPBACK_INIT;
1946 struct raq *raq;
1947
1948 if (debug & D_PKTIN)
1949 logmsg(LOG_DEBUG, "loopback_ra_dequeue()\n");
1950
1951 while ((raq = raq_head) != NULL) {
1952 raq_head = raq->raq_next;
1953 raq->raq_next = NULL;
1954
1955 if (debug & D_PKTIN) {
1956 logmsg(LOG_DEBUG, "loopback_ra_dequeue for %s\n",
1957 raq->raq_pi->pi_name);
1958 }
1959
1960 incoming_ra(raq->raq_pi,
1961 (struct nd_router_advert *)raq->raq_packet,
1962 raq->raq_packetlen, &from, _B_TRUE);
1963 free(raq->raq_packet);
1964 free(raq);
1965 }
|
1925 bcopy(ra, raq->raq_packet, len);
1926 raq->raq_packetlen = len;
1927 raq->raq_pi = pi;
1928
1929 /* Tail insert */
1930 raqp = &raq_head;
1931 while (*raqp != NULL)
1932 raqp = &((*raqp)->raq_next);
1933 *raqp = raq;
1934
1935 /* Signal for poll loop */
1936 sig_handler(255);
1937 }
1938
1939 /*
1940 * Dequeue and process all queued advertisements.
1941 */
1942 static void
1943 loopback_ra_dequeue(void)
1944 {
1945 struct sockaddr_in6 from = { 0, 0, 0, IN6ADDR_LOOPBACK_INIT };
1946 struct raq *raq;
1947
1948 if (debug & D_PKTIN)
1949 logmsg(LOG_DEBUG, "loopback_ra_dequeue()\n");
1950
1951 while ((raq = raq_head) != NULL) {
1952 raq_head = raq->raq_next;
1953 raq->raq_next = NULL;
1954
1955 if (debug & D_PKTIN) {
1956 logmsg(LOG_DEBUG, "loopback_ra_dequeue for %s\n",
1957 raq->raq_pi->pi_name);
1958 }
1959
1960 incoming_ra(raq->raq_pi,
1961 (struct nd_router_advert *)raq->raq_packet,
1962 raq->raq_packetlen, &from, _B_TRUE);
1963 free(raq->raq_packet);
1964 free(raq);
1965 }
|