static void Release( entry *VE ) { int ic, n=0; struct interface idown, *nif; for(nif=&VE->pseudo_if; n<MAX_DEP_IF; nif = &(VE->extra_ifs[n++])) { if(nif->ipaddr.s_addr == 0) break; memcpy(&idown, nif, sizeof(struct interface)); ic = if_down(&idown); if(ic) { const char *em = if_error(); if(em && strlen(em)) { wack_alarm(PRINT, "%d %s", __LINE__, if_error()); } } else { char buffer[16]; snprintf(buffer, 16, inet_ntoa(idown.ipaddr)); wack_alarm(PRINT, "DOWN: %s:%s/%s", idown.ifname,buffer,inet_ntoa(idown.netmask)); } execute_all_user(VE->pseudo_if, VE->extra_ifs, VE->real_if, DLFUNCS_TYPE_ON_DOWN); } My.num_allocated--; }
static void force_reup() { int i; for(i=0; i < Num_pseudo; i++) { if ( _rif_ip_s(My) == _rif_ip_s(Allocation_table[i]) ) { /* This is ours */ int ic, n=0; struct interface iface, *nif; entry *VE; VE = &Allocation_table[i]; for(nif=&VE->pseudo_if; n<MAX_DEP_IF; nif = &(VE->extra_ifs[n++])) { if(nif->ipaddr.s_addr == 0) break; memcpy(&iface, nif, sizeof(struct interface)); ic = if_up(&iface); if(ic) wack_alarm(PRINT, "%s", if_error()); else { char buffer[16]; snprintf(buffer, 16, inet_ntoa(iface.ipaddr)); wack_alarm(PRINT, " (re)UP: %s:%s/%s", iface.ifname,buffer,inet_ntoa(iface.netmask)); } } invoke_spoofer(VE); } } }
static void Acquire( entry *VE ) { int ic, n=0; struct interface iface, *nif; for(nif=&VE->pseudo_if; n<MAX_DEP_IF; nif = &(VE->extra_ifs[n++])) { if(nif->ipaddr.s_addr == 0) break; memcpy(&iface, nif, sizeof(struct interface)); ic = if_up(&iface); if(ic) wack_alarm(PRINT, "%d %s", __LINE__, if_error()); else { char buffer[16]; snprintf(buffer, 16, inet_ntoa(iface.ipaddr)); wack_alarm(PRINT, " UP: %s:%s/%s", iface.ifname,buffer,inet_ntoa(iface.netmask)); } } invoke_spoofer(VE); execute_all_user(VE->pseudo_if, VE->extra_ifs, VE->real_if, DLFUNCS_TYPE_ON_UP); My.num_allocated++; }
int main (int argc, char *argv[]) { int ret,errs = 0; char *src, *sendrec; int bufsize = BUFSIZE; int myrank, nprocs; int i; MPI_Status status; int small_non_contig_struct_count = 3; int small_non_contig_struct_blocklens[] = {1, 1, 1}; MPI_Aint small_non_contig_struct_disps[] = {0, 2, 4}; MPI_Datatype small_non_contig_struct_types[] = {MPI_CHAR, MPI_CHAR,MPI_CHAR}; MPI_Datatype small_non_contig_struct_type; int contig_indexed_count = 3; int contig_indexed_blocklens[] = {1, 2, 1}; int contig_indexed_indices[] = {4, 8, 16}; int contig_indexed_inner_type = MPI_INT; int contig_indexed_type; MTest_Init( &argc, &argv ); ret = MPI_Comm_rank(MPI_COMM_WORLD, &myrank); ret = MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if (nprocs < 2) { printf("Need at least 2 procs\n"); exit(RESFAIL_ERROR); } ret = MPI_Type_struct(small_non_contig_struct_count, small_non_contig_struct_blocklens, small_non_contig_struct_disps, small_non_contig_struct_types, &small_non_contig_struct_type); if_error("MPI_Type_struct", "small_non_contig_struct_type", ret); ret = MPI_Type_commit(&small_non_contig_struct_type); if_error("MPI_Type_commit", "small_non_contig_struct_type", ret); ret = MPI_Type_indexed(contig_indexed_count,contig_indexed_blocklens, contig_indexed_indices,contig_indexed_inner_type, &contig_indexed_type); if_error("MPI_Type_indexed", "contig_indexed_type", ret); ret = MPI_Type_commit(&contig_indexed_type); if_error("MPI_Type_commit", "contig_indexed_type", ret); ret = MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &src); if (ret != 0) { printf("MPI_Alloc_mem src = #%x\n", ret); exit(INTERNAL_ERROR); } ret = MPI_Alloc_mem(bufsize, MPI_INFO_NULL, &sendrec); if (ret != 0) { printf("MPI_Alloc_mem sendrec buf = #%x\n", ret); exit(INTERNAL_ERROR); } for (i=0; i<bufsize; i++) { src[i] = (char) i+1; } memset(sendrec, 0, bufsize); MPI_Barrier(MPI_COMM_WORLD); if (myrank == 1) { MPI_Send(src, 1, small_non_contig_struct_type, 0, 0xabc,MPI_COMM_WORLD); } else { MPI_Errhandler_set( MPI_COMM_WORLD, MPI_ERRORS_RETURN ); ret = MPI_Recv(sendrec, 1, contig_indexed_type, 1, 0xabc, MPI_COMM_WORLD, &status); if (ret == MPI_SUCCESS) { printf( "MPI_Recv succeeded with non-matching datatype signature\n" ); errs++; } } MPI_Barrier(MPI_COMM_WORLD); MPI_Type_free( &small_non_contig_struct_type ); MPI_Type_free( &contig_indexed_type ); MPI_Free_mem(src); MPI_Free_mem(sendrec); MTest_Finalize( errs ); MPI_Finalize( ); return 0; }
int main (int argc, char *argv[]) { int A,B,C,D, i, ic; struct interface req, myips[300]; int state; #ifdef WIN32 WSADATA wsadata; WSAStartup(WINSOCK_VERSION, &wsadata); #endif i=1; if(argc < 2) goto usage_error; if(argv[i][0] != '-') goto usage_error; switch(argv[i++][1]) { case 'r': state=ARPLIST; break; case 'l': state=LIST; break; case 'a': state=ADD; strcpy(req.ifname, argv[i++]); sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.ipaddr.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.bcast.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.netmask.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); break; case 'd': state=DELETE; sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.ifname[0] = '\0'; req.ipaddr.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); break; case 's': state=SPOOF; strcpy(req.ifname, argv[i++]); sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.ipaddr.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); sscanf(argv[i++], "%d.%d.%d.%d", &A,&B,&C,&D); req.bcast.s_addr = htonl((A << 24) | (B << 16) | (C << 8) | D); break; usage_error: default: fprintf(stderr, "%s:\n\tUsage:\n\t\t-l\t\t\t\t\tlist interfaces\n\t\t-a <interface> <ip> <bcast> <netmask>\tAdd this VIP\n\t\t-d <IP>\t\t\t\t\tDelete this VIP\n\t\t-s interface VIP destinationIP\n", argv[0]); exit(-1); } if_initialize(); if(state&ARPLIST) { arp_entry *ad, *ac; fprintf(stderr, "Sampling and printing local arp-cache\n"); sample_arp_cache(); sample_arp_cache(); ac = ad = fetch_shared_arp_cache(); while(ad && ad->ip) { struct in_addr iad; iad.s_addr = ad->ip; fprintf(stderr, "\t%s\n", inet_ntoa(iad)); ad++; } free(ac); } if(state&ADD) { ic = if_up(&req); if(ic) { perror("ioctl"); fprintf(stderr, "%s\n", if_error()); } else { fprintf(stderr, "if_up: %s\t%s", req.ifname, inet_ntoa(req.ipaddr)); fprintf(stderr, "\t%s", inet_ntoa(req.bcast)); fprintf(stderr, "\t%s\n", inet_ntoa(req.netmask)); } } if(state&DELETE) { ic = if_down(&req); if(ic) fprintf(stderr, "%s\n", if_error()); else { fprintf(stderr, "if_down: %s\t%s", req.ifname, inet_ntoa(req.ipaddr)); fprintf(stderr, "\t%s", inet_ntoa(req.bcast)); fprintf(stderr, "\t%s\n", inet_ntoa(req.netmask)); } } if(state&SPOOF) { ic = if_send_spoof_request(req.ifname, req.ipaddr.s_addr, req.bcast.s_addr, NULL, 5, 0); if(ic) fprintf(stderr, "%s\n", if_error()); else { fprintf(stderr, "if_spoofed: %s\t%s\n",req.ifname, inet_ntoa(req.ipaddr)); } } if(state) { ic = if_list_ips(myips, 300); fprintf(stderr, "Found %d IPs:\n", ic); for(i=0; i<ic; i++) { fprintf(stderr, "%s\t[%02x:%02x:%02x:%02x:%02x:%02x]", myips[i].ifname, myips[i].mac[0], myips[i].mac[1], myips[i].mac[2], myips[i].mac[3], myips[i].mac[4], myips[i].mac[5]); fprintf(stderr, "\t%s", inet_ntoa(myips[i].ipaddr)); fprintf(stderr, "\t%s", inet_ntoa(myips[i].bcast)); fprintf(stderr, "\t%s\n", inet_ntoa(myips[i].netmask)); } } return 0; }