/*
 * DO NOT EDIT THIS FILE. It was generated from linux/if_tun.h.
 *
 * Copyright (c) 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/*
 *  Universal TUN/TAP device driver.
 *  Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
 *
 *  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.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 */

#include <Python.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/if.h>
#include <linux/if_tun.h>

void _init_linux_if_tun_h(PyObject *m) {
  /* Read queue size */
  PyModule_AddIntMacro(m, TUN_READQ_SIZE);

  /* TUN device flags */
  PyModule_AddIntMacro(m, TUN_TUN_DEV);
  PyModule_AddIntMacro(m, TUN_TAP_DEV);
  PyModule_AddIntMacro(m, TUN_TYPE_MASK);

  PyModule_AddIntMacro(m, TUN_FASYNC);
  PyModule_AddIntMacro(m, TUN_NOCHECKSUM);
  PyModule_AddIntMacro(m, TUN_NO_PI);
  PyModule_AddIntMacro(m, TUN_ONE_QUEUE);
  PyModule_AddIntMacro(m, TUN_PERSIST);
  PyModule_AddIntMacro(m, TUN_VNET_HDR);

  /* Ioctl defines */
  PyModule_AddIntMacro(m, TUNSETNOCSUM);
  PyModule_AddIntMacro(m, TUNSETDEBUG);
  PyModule_AddIntMacro(m, TUNSETIFF);
  PyModule_AddIntMacro(m, TUNSETPERSIST);
  PyModule_AddIntMacro(m, TUNSETOWNER);
  PyModule_AddIntMacro(m, TUNSETLINK);
  PyModule_AddIntMacro(m, TUNSETGROUP);
  PyModule_AddIntMacro(m, TUNGETFEATURES);
  PyModule_AddIntMacro(m, TUNSETOFFLOAD);
  PyModule_AddIntMacro(m, TUNSETTXFILTER);
  PyModule_AddIntMacro(m, TUNGETIFF);
  PyModule_AddIntMacro(m, TUNGETSNDBUF);
  PyModule_AddIntMacro(m, TUNSETSNDBUF);
  PyModule_AddIntMacro(m, TUNATTACHFILTER);
  PyModule_AddIntMacro(m, TUNDETACHFILTER);
  PyModule_AddIntMacro(m, TUNGETVNETHDRSZ);
  PyModule_AddIntMacro(m, TUNSETVNETHDRSZ);

  /* TUNSETIFF ifr flags */
  PyModule_AddIntMacro(m, IFF_TUN);
  PyModule_AddIntMacro(m, IFF_TAP);
  PyModule_AddIntMacro(m, IFF_NO_PI);
  PyModule_AddIntMacro(m, IFF_ONE_QUEUE);
  PyModule_AddIntMacro(m, IFF_VNET_HDR);
  PyModule_AddIntMacro(m, IFF_TUN_EXCL);

  /* Features for GSO (TUNSETOFFLOAD). */
  PyModule_AddIntMacro(m, TUN_F_CSUM);
  PyModule_AddIntMacro(m, TUN_F_TSO4);
  PyModule_AddIntMacro(m, TUN_F_TSO6);
  PyModule_AddIntMacro(m, TUN_F_TSO_ECN);
  PyModule_AddIntMacro(m, TUN_F_UFO);

  /* Protocol info prepended to the packets (when IFF_NO_PI is not set) */
  PyModule_AddIntMacro(m, TUN_PKT_STRIP);
}
