/* * Functions for managing transparent proxying with CTTPROXY. * This file should be compiled only if CTTPROXY is enabled. * * Copyright 2000-2008 Willy Tarreau * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * */ #include #include #include #include #include #include #include #include #include #include #include #include /* * Checks that CTTPROXY is available and in the right version. * Returns 0 if OK, -1 if wrong version, -2 if not available or other error. */ int check_cttproxy_version() { struct in_tproxy itp1; int fd; memset(&itp1, 0, sizeof(itp1)); fd = socket(AF_INET, SOCK_STREAM, 0); if (fd == -1) return -2; itp1.op = TPROXY_VERSION; itp1.v.version = 0x02000000; /* CTTPROXY version 2.0 expected */ if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp1, sizeof(itp1)) == -1) { if (errno == -EINVAL) return -1; /* wrong version */ else return -2; /* not supported or other error */ } return 0; } /* * Local variables: * c-indent-level: 8 * c-basic-offset: 8 * End: */