#include #include #include #include #include "ftcp.h" #define IFNAME "eth0" /* Network interface to use. */ void error(char *msg) { fprintf(stderr, "ftcp: ERROR"); if (msg != NULL) fprintf(stderr, " %s", msg); if (errno != 0) fprintf(stderr, " [%s]", strerror(errno)); fprintf(stderr, ".\n"); exit(1); } int main(int argc, char *argv[]) { ftcp_t fp; fp.ifname = IFNAME; /* Check freeze TCP status for network interface IFNAME */ if (ftcp(FTCP_FREEZE_CHECK, &fp) == -1 || fp.val == -ENODEV) error("FTCP_FREEZE_CHECK failed"); printf("Freeze TCP is %s for interface " IFNAME ".\n", (fp.val == 1) ? "enabled" : "disabled"); /* Enable freeze TCP for network interface IFNAME */ printf("Enabling Freeze TCP for interface " IFNAME ".\n"); if (ftcp(FTCP_FREEZE_ON, &fp) == -1 || fp.val == -ENODEV) error("FTCP_FREEZE_ON failed"); /* Wait a short while so packet(s) with zero window advertisement * get sent. */ usleep(500000); /* Drop all packets going through IFNAME */ printf("Disabling network interface " IFNAME ".\n"); if (ftcp(FTCP_IF_DISABLE, &fp) == -1 || fp.val == -ENODEV) error("FTCP_IF_DISABLE failed"); /* Wait a while */ sleep(5); /* Disable freeze TCP for network interface IFNAME */ printf("Disabling Freeze TCP for interface " IFNAME ".\n"); if (ftcp(FTCP_FREEZE_OFF, &fp) == -1 || fp.val == -ENODEV) error("FTCP_FREEZE_OFF failed"); /* Allow packets back through IFNAME */ printf("Enabling network interface " IFNAME ".\n"); if (ftcp(FTCP_IF_ENABLE, &fp) == -1 || fp.val == -ENODEV) error("FTCP_IF_ENABLE failed"); /* Send duplicate ACKs */ printf("Sending 3 duplicate ACKs on all established TCP connections.\n"); if (ftcp(FTCP_DUP_ACKS3, &fp) == -1 || fp.val == -ENODEV) error("FTCP_DUP_ACKS3 failed"); exit(0); }