int push_swap(int *l_a, int count) { int pos_min; int ra_count; ra_count = 0; pos_min = find_lowest_number(l_a, count); while (ra_count <= pos_min) { rotate(l_a, count); ra_count++; } print_ra(pos_min); if (count == 0) return (0); write(1, "pb ", 3); push_swap(l_a, count - 1); return (0); }
int main(int argc, char *argv[]) { unsigned char msg[MSG_SIZE]; int c, len, hoplimit; int fform = 0; int edefs = 0; struct sockaddr_in6 rcv_addr; struct in6_pktinfo *pkt_info = NULL; #ifdef HAVE_GETOPT_LONG int opt_idx; #endif pname = ((pname=strrchr(argv[0],'/')) != NULL)?pname+1:argv[0]; /* parse args */ #ifdef HAVE_GETOPT_LONG while ((c = getopt_long(argc, argv, "d:fehv", prog_opt, &opt_idx)) > 0) #else while ((c = getopt(argc, argv, "d:fehv")) > 0) #endif { switch (c) { case 'd': set_debuglevel(atoi(optarg)); break; case 'f': fform = 1; break; case 'e': edefs = 1; break; case 'v': version(); break; case 'h': usage(); #ifdef HAVE_GETOPT_LONG case ':': fprintf(stderr, "%s: option %s: parameter expected\n", pname, prog_opt[opt_idx].name); exit(1); #endif case '?': exit(1); } } if (log_open(L_STDERR, pname, NULL, 0) < 0) exit(1); /* get a raw socket for sending and receiving ICMPv6 messages */ sock = open_icmpv6_socket(); if (sock < 0) exit(1); for(;;) { len = recv_rs_ra(sock, msg, &rcv_addr, &pkt_info, &hoplimit); if (len > 0) { struct icmp6_hdr *icmph; /* * can this happen? */ if (len < sizeof(struct icmp6_hdr)) { log(LOG_WARNING, "received icmpv6 packet with invalid length: %d", len); exit(1); } icmph = (struct icmp6_hdr *) msg; if (icmph->icmp6_type != ND_ROUTER_SOLICIT && icmph->icmp6_type != ND_ROUTER_ADVERT) { /* * We just want to listen to RSs and RAs */ log(LOG_ERR, "icmpv6 filter failed"); exit(1); } dlog(LOG_DEBUG, 4, "receiver if_index: %d", pkt_info->ipi6_ifindex); if (icmph->icmp6_type == ND_ROUTER_SOLICIT) { /* not yet */ } else if (icmph->icmp6_type == ND_ROUTER_ADVERT) { if (!fform) print_ra(msg, len, &rcv_addr, hoplimit, pkt_info->ipi6_ifindex); else print_ff(msg, len, &rcv_addr, hoplimit, pkt_info->ipi6_ifindex, edefs); } } else if (len == 0) { log(LOG_ERR, "received zero lenght packet"); exit(1); } else { log(LOG_ERR, "recv_rs_ra: %s", strerror(errno)); exit(1); } } exit(0); }