| * Functions for managing transparent proxying with CTTPROXY. |
| * This file should be compiled only if CTTPROXY is enabled. |
| * Copyright 2000-2008 Willy Tarreau <w@1wt.eu> |
| * 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 <common/compat.h> |
| #include <common/config.h> |
| #include <import/ip_tproxy.h> |
| * 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() { |
| memset(&itp1, 0, sizeof(itp1)); |
| fd = socket(AF_INET, SOCK_STREAM, 0); |
| itp1.op = TPROXY_VERSION; |
| itp1.v.version = 0x02000000; /* CTTPROXY version 2.0 expected */ |
| if (setsockopt(fd, SOL_IP, IP_TPROXY, &itp1, sizeof(itp1)) == -1) { |
| ret = -1; /* wrong version */ |
| ret = -2; /* not supported or other error */ |