| #include <sys/types.h> |
| #include <sys/time.h> |
| #include <sys/socket.h> |
| |
| #include <netinet/in.h> |
| #include <net/if.h> |
| |
| #include <arpa/inet.h> |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <fcntl.h> |
| #include <unistd.h> |
| #include <strings.h> |
| |
| #include "netinet/ip_compat.h" |
| #include "netinet/ip_fil.h" |
| #include "netinet/ip_nat.h" |
| #include "netinet/ip_state.h" |
| #include "netinet/ip_sync.h" |
| |
| |
| int main __P((int, char *[])); |
| |
| |
| int main(argc, argv) |
| int argc; |
| char *argv[]; |
| { |
| struct sockaddr_in sin; |
| char buff[1400], *s; |
| synclogent_t *sl; |
| syncupdent_t *su; |
| int nfd, lfd, n; |
| synchdr_t *sh; |
| |
| if (argc < 2) |
| exit(1); |
| |
| lfd = open(IPSYNC_NAME, O_RDONLY); |
| if (lfd == -1) { |
| perror("open"); |
| exit(1); |
| } |
| |
| bzero((char *)&sin, sizeof(sin)); |
| sin.sin_family = AF_INET; |
| sin.sin_addr.s_addr = inet_addr(argv[1]); |
| if (argc > 2) |
| sin.sin_port = htons(atoi(argv[2])); |
| else |
| sin.sin_port = htons(43434); |
| |
| nfd = socket(AF_INET, SOCK_STREAM, 0); |
| if (nfd == -1) { |
| perror("socket"); |
| exit(1); |
| } |
| |
| if (connect(nfd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { |
| perror("connect"); |
| exit(1); |
| } |
| |
| while ((n = read(lfd, buff, sizeof(buff))) > 0) { |
| for (s = buff; s < buff + n; ) { |
| sh = (synchdr_t *)s; |
| printf("(%d) v:%d p:%d", (int)(buff + n - s), sh->sm_v, |
| sh->sm_p); |
| |
| if (sh->sm_cmd == SMC_CREATE) |
| printf(" cmd:CREATE"); |
| else if (sh->sm_cmd == SMC_UPDATE) |
| printf(" cmd:UPDATE"); |
| else |
| printf(" cmd:Unknown(%d)", sh->sm_cmd); |
| |
| if (sh->sm_table == SMC_NAT) |
| printf(" table:NAT"); |
| else if (sh->sm_table == SMC_STATE) |
| printf(" table:STATE"); |
| else |
| printf(" table:Unknown(%d)", sh->sm_table); |
| |
| printf(" num:%d\n", (u_32_t)ntohl(sh->sm_num)); |
| if (sh->sm_cmd == SMC_CREATE) { |
| sl = (synclogent_t *)sh; |
| s += sizeof(*sl); |
| } else if (sh->sm_cmd == SMC_UPDATE) { |
| su = (syncupdent_t *)sh; |
| s += sizeof(*su); |
| } else { |
| printf("Unknown command\n"); |
| } |
| } |
| |
| if (write(nfd, buff, n) != n) { |
| perror("write"); |
| exit(1); |
| } |
| |
| } |
| close(lfd); |
| close(nfd); |
| exit(0); |
| } |