From 1b06c2a3ac03b0df3d22d34d6d7e904024c0e9a1 Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Mon, 2 May 2022 09:47:11 +0200 Subject: [PATCH] Update python bindings with Cython Still some way to go to eliminate all issues. --- python/dnet.c | 33278 +++++++++++++++++++++++++++++++++++----------- python/dnet.pyx | 8 +- python/test.py | 5 +- 3 files changed, 25364 insertions(+), 7927 deletions(-) diff --git a/python/dnet.c b/python/dnet.c index 7b8dfbfa..89394b97 100644 --- a/python/dnet.c +++ b/python/dnet.c @@ -1,92 +1,1009 @@ -/* Generated by Pyrex 0.9.4.1 on Sat Jan 20 06:39:10 2007 */ +/* Generated by Cython 0.29.28 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [ + "../include/dnet.h" + ], + "extra_objects": [ + "../src/.libs/addr-util.o", + "../src/.libs/addr.o", + "../src/.libs/arp-ioctl.o", + "../src/.libs/blob.o", + "../src/.libs/eth-linux.o", + "../src/.libs/fw-none.o", + "../src/.libs/intf.o", + "../src/.libs/ip-util.o", + "../src/.libs/ip.o", + "../src/.libs/ip6.o", + "../src/.libs/ndisc-linux.o", + "../src/.libs/rand.o", + "../src/.libs/route-linux.o", + "../src/.libs/tun-linux.o" + ], + "include_dirs": [ + "../include" + ], + "name": "dnet", + "sources": [ + "./dnet.pyx" + ] + }, + "module_name": "dnet" +} +END: Cython Metadata */ +#ifndef PY_SSIZE_T_CLEAN #define PY_SSIZE_T_CLEAN -#define Py_TPFLAGS_CHECKTYPES 0 +#endif /* PY_SSIZE_T_CLEAN */ #include "Python.h" -#include "structmember.h" - +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_28" +#define CYTHON_HEX_VERSION 0x001D1CF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif -#if PY_VERSION_HEX < 0x02050000 - typedef int Py_ssize_t; - #define PY_SSIZE_T_MAX INT_MAX - #define PY_SSIZE_T_MIN INT_MIN - #define PyLong_FromSsize_t(z) PyLong_FromLong(z) - #define PyLong_AsSsize_t(o) PyLong_AsLong(o) +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL #endif -#ifdef __cplusplus -#define __PYX_EXTERN_C extern "C" +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #if PY_VERSION_HEX >= 0x030B00A4 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #elif !defined(CYTHON_FAST_THREAD_STATE) + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030B00A1) + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #if PY_VERSION_HEX >= 0x030B00A4 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 + #elif !defined(CYTHON_USE_EXC_INFO_STACK) + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #if PY_MAJOR_VERSION < 3 + #include "longintrepr.h" + #endif + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" + #define __Pyx_DefaultClassType PyType_Type +#if PY_VERSION_HEX >= 0x030B00A1 + static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f, + PyObject *code, PyObject *c, PyObject* n, PyObject *v, + PyObject *fv, PyObject *cell, PyObject* fn, + PyObject *name, int fline, PyObject *lnos) { + PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL; + PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL; + const char *fn_cstr=NULL; + const char *name_cstr=NULL; + PyCodeObject* co=NULL; + PyObject *type, *value, *traceback; + PyErr_Fetch(&type, &value, &traceback); + if (!(kwds=PyDict_New())) goto end; + if (!(argcount=PyLong_FromLong(a))) goto end; + if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end; + if (!(posonlyargcount=PyLong_FromLong(0))) goto end; + if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end; + if (!(kwonlyargcount=PyLong_FromLong(k))) goto end; + if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end; + if (!(nlocals=PyLong_FromLong(l))) goto end; + if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end; + if (!(stacksize=PyLong_FromLong(s))) goto end; + if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end; + if (!(flags=PyLong_FromLong(f))) goto end; + if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end; + if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end; + if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end; + if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end; + if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end; + if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too; + if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here + if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too; + Py_XDECREF((PyObject*)co); + co = (PyCodeObject*)call_result; + call_result = NULL; + if (0) { + cleanup_code_too: + Py_XDECREF((PyObject*)co); + co = NULL; + } + end: + Py_XDECREF(kwds); + Py_XDECREF(argcount); + Py_XDECREF(posonlyargcount); + Py_XDECREF(kwonlyargcount); + Py_XDECREF(nlocals); + Py_XDECREF(stacksize); + Py_XDECREF(replace); + Py_XDECREF(call_result); + Py_XDECREF(empty); + if (type) { + PyErr_Restore(type, value, traceback); + } + return co; + } +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #if defined(PyUnicode_IS_READY) + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #else + #define __Pyx_PyUnicode_READY(op) (0) + #endif + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) + #endif + #else + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) + #endif +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact +#ifndef PyObject_Unicode + #define PyObject_Unicode PyObject_Str +#endif +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if PY_VERSION_HEX >= 0x030900A4 + #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) +#else + #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) + #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) #else -#define __PYX_EXTERN_C extern +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + +#define __PYX_MARK_ERR_POS(f_index, lineno) \ + { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } +#define __PYX_ERR(f_index, lineno, Ln_error) \ + { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif #endif -__PYX_EXTERN_C double pow(double, double); + +#define __PYX_HAVE__dnet +#define __PYX_HAVE_API__dnet +/* Early includes */ #include "dnet.h" -#include "config.h" - - -typedef struct {const char *s; const void **p;} __Pyx_CApiTabEntry; /*proto*/ -typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ -typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ -static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t); /*proto*/ -static int __Pyx_EndUnpack(PyObject *, Py_ssize_t); /*proto*/ -static int __Pyx_PrintItem(PyObject *); /*proto*/ -static int __Pyx_PrintNewline(void); /*proto*/ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static void __Pyx_ReRaise(void); /*proto*/ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ -static PyObject *__Pyx_GetExcValue(void); /*proto*/ -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ -static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], Py_ssize_t nargs, PyObject **args2, PyObject **kwds2); /*proto*/ -static void __Pyx_WriteUnraisable(char *name); /*proto*/ -static void __Pyx_AddTraceback(char *funcname); /*proto*/ -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ -static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ -static int __Pyx_InitCApi(PyObject *module); /*proto*/ -static int __Pyx_ImportModuleCApi(__Pyx_CApiTabEntry *t); /*proto*/ -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static PyObject *__pyx_m; +#include "string.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 1 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "ascii" +#define __Pyx_PyObject_FromString __Pyx_PyStr_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyStr_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; static int __pyx_lineno; -static char *__pyx_filename; -static char **__pyx_f; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; -static char __pyx_mdoc[] = "dumb networking library\n\nThis module provides a simplified interface to several low-level\nnetworking routines, including network address manipulation, kernel\narp(4) cache and route(4) table lookup and manipulation, network\nfirewalling, network interface lookup and manipulation, IP tunnelling,\nand raw IP packet and Ethernet frame transmission.\n"; -/* Declarations from dnet */ +static const char *__pyx_f[] = { + "dnet.pyx", + "stringsource", +}; +/*--- Type declarations ---*/ +struct __pyx_obj_4dnet_eth; +struct __pyx_obj_4dnet_ip; +struct __pyx_obj_4dnet_addr; +struct __pyx_obj_4dnet___addr_ip4_iter; +struct __pyx_obj_4dnet_arp; +struct __pyx_obj_4dnet_intf; +struct __pyx_obj_4dnet_route; +struct __pyx_obj_4dnet_fw; +struct __pyx_obj_4dnet_rand; +struct __pyx_obj_4dnet___rand_xrange; +struct __pyx_obj_4dnet_tun; + +/* "dnet.pyx":1399 + * + * # Modified (variable block length) TEA by Niels Provos + * cdef enum: # <<<<<<<<<<<<<< + * TEADELTA = 0x9e3779b9 + * TEAROUNDS = 32 + */ enum { - __pyx_e_4dnet_TEADELTA = 2654435769, + __pyx_e_4dnet_TEADELTA = 0x9e3779b9, __pyx_e_4dnet_TEAROUNDS = 32, - __pyx_e_4dnet_TEASBOXSIZE = 128, - __pyx_e_4dnet_TEASBOXSHIFT = 7, + __pyx_e_4dnet_TEASBOXSIZE = 0x80, + __pyx_e_4dnet_TEASBOXSHIFT = 7 }; - +/* "dnet.pyx":105 + * ETH_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff\xff\xff", 6) + * + * cdef class eth: # <<<<<<<<<<<<<< + * """eth(device) -> Ethernet device object + * + */ struct __pyx_obj_4dnet_eth { PyObject_HEAD - eth_t (*eth); + eth_t *eth; }; +/* "dnet.pyx":243 + * IP_ADDR_MCAST_LOCAL = PyBytes_FromStringAndSize("\xe0\x00\x00\xff", 4) + * + * cdef class ip: # <<<<<<<<<<<<<< + * """ip() -> Raw IP object + * + */ struct __pyx_obj_4dnet_ip { PyObject_HEAD - ip_t (*ip); + ip_t *ip; }; +/* "dnet.pyx":439 + * ADDR_TYPE_IP6 = 3 + * + * cdef class addr: # <<<<<<<<<<<<<< + * """addr(addrtxt=None, addrtype=ADDR_TYPE_NONE) -> network address object + * + */ struct __pyx_obj_4dnet_addr { PyObject_HEAD struct addr _addr; }; +/* "dnet.pyx":636 + * return p + * + * cdef class __addr_ip4_iter: # <<<<<<<<<<<<<< + * cdef unsigned long cur # XXX - HBO + * cdef unsigned long max # XXX - HBO + */ struct __pyx_obj_4dnet___addr_ip4_iter { PyObject_HEAD unsigned long cur; @@ -94,59 +1011,576 @@ struct __pyx_obj_4dnet___addr_ip4_iter { }; +/* "dnet.pyx":701 + * return ret + * + * cdef class arp: # <<<<<<<<<<<<<< + * """arp() -> ARP table object + * + */ struct __pyx_obj_4dnet_arp { PyObject_HEAD - arp_t (*arp); + arp_t *arp; }; +/* "dnet.pyx":981 + * return ret + * + * cdef class intf: # <<<<<<<<<<<<<< + * """intf() -> Interface table object + * + */ struct __pyx_obj_4dnet_intf { PyObject_HEAD - intf_t (*intf); + intf_t *intf; }; +/* "dnet.pyx":1100 + * return ret + * + * cdef class route: # <<<<<<<<<<<<<< + * """route() -> Routing table object + * + */ struct __pyx_obj_4dnet_route { PyObject_HEAD - route_t (*route); + route_t *route; }; +/* "dnet.pyx":1246 + * return ret + * + * cdef class fw: # <<<<<<<<<<<<<< + * """fw() -> Firewall ruleset object + * + */ struct __pyx_obj_4dnet_fw { PyObject_HEAD - fw_t (*fw); + fw_t *fw; }; +/* "dnet.pyx":1323 + * rand_t *rand_close(rand_t *rand) + * + * cdef class rand: # <<<<<<<<<<<<<< + * """rand() -> Pseudo-random number generator + * + */ struct __pyx_obj_4dnet_rand { PyObject_HEAD - rand_t (*rand); + rand_t *rand; }; +/* "dnet.pyx":1405 + * TEASBOXSHIFT = 7 + * + * cdef class __rand_xrange: # <<<<<<<<<<<<<< + * cdef rand_t *rand + * cdef unsigned long cur, enc, max, mask, start, sboxmask + */ struct __pyx_obj_4dnet___rand_xrange { PyObject_HEAD - rand_t (*rand); + rand_t *rand; unsigned long cur; unsigned long enc; unsigned long max; unsigned long mask; unsigned long start; unsigned long sboxmask; - unsigned int (sbox[128]); + unsigned int sbox[0x80]; int left; int right; int kshift; }; +/* "dnet.pyx":1489 + * tun_t *tun_close(tun_t *tun) + * + * cdef class tun: # <<<<<<<<<<<<<< + * """tun(src, dst[, mtu]) -> Network tunnel interface handle + * + */ struct __pyx_obj_4dnet_tun { PyObject_HEAD - tun_t (*tun); - char (*buf); + tun_t *tun; + char *buf; int mtu; }; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* GCCDiagnostics.proto */ +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) +#define __Pyx_HAS_GCC_DIAGNOSTIC +#endif + +/* BuildPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char); + +/* IncludeStringH.proto */ +#include + +/* CIntToPyUnicode.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char); + +/* PyObjectFormatAndDecref.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f); +static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f); + +/* JoinPyUnicode.proto */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + Py_UCS4 max_char); + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + PyList_SET_ITEM(list, len, x); + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif +#if CYTHON_FAST_PYCALL + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif // CYTHON_FAST_PYCALL +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyObjectGetMethod.proto */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); + +/* PyObjectCallMethod1.proto */ +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); + +/* append.proto */ +static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x); + +/* KeywordStringCheck.proto */ +static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif + +/* PyObjectCallNoArg.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); +#else +#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) +#endif + +/* ArgTypeTest.proto */ +#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ + ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ + __Pyx__ArgTypeTest(obj, type, name, exact)) +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); + +/* PyErrExceptionMatches.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) +static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); +#else +#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) +#endif + +/* GetAttr.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); + +/* GetAttr3.proto */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); + +/* RaiseTooManyValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); + +/* RaiseNeedMoreValuesToUnpack.proto */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); + +/* IterFinish.proto */ +static CYTHON_INLINE int __Pyx_IterFinish(void); + +/* UnpackItemEndCheck.proto */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PySequenceContains.proto */ +static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { + int result = PySequence_Contains(seq, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* HasAttr.proto */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); + +/* PyObject_GenericGetAttrNoDict.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr +#endif + +/* PyObject_GenericGetAttr.proto */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr +#endif + +/* PyObjectGetAttrStrNoError.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); + +/* SetupReduce.proto */ +static int __Pyx_setup_reduce(PyObject* type_obj); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'dnet' */ static PyTypeObject *__pyx_ptype_4dnet_eth = 0; static PyTypeObject *__pyx_ptype_4dnet_ip = 0; static PyTypeObject *__pyx_ptype_4dnet_addr = 0; @@ -158,1031 +1592,3126 @@ static PyTypeObject *__pyx_ptype_4dnet_fw = 0; static PyTypeObject *__pyx_ptype_4dnet_rand = 0; static PyTypeObject *__pyx_ptype_4dnet___rand_xrange = 0; static PyTypeObject *__pyx_ptype_4dnet_tun = 0; -static PyObject *__pyx_k16; -static PyObject *__pyx_k17; -static PyObject *__pyx_k18; -static PyObject *__pyx_k24; -static PyObject *__pyx_k25; -static PyObject *__pyx_k26; -static PyObject *__pyx_k27; -static PyObject *__pyx_k28; -static PyObject *__pyx_k29; -static PyObject *__pyx_k30; -static PyObject *__pyx_k31; -static PyObject *__pyx_k34; -static PyObject *__pyx_k35; -static PyObject *__pyx_k36; -static PyObject *__pyx_k37; -static PyObject *__pyx_k38; -static PyObject *__pyx_k39; -static PyObject *__pyx_k40; -static PyObject *__pyx_k41; -static PyObject *__pyx_k42; -static PyObject *__pyx_k43; -static PyObject *__pyx_k44; -static PyObject *__pyx_k45; -static PyObject *__pyx_k46; -static PyObject *__pyx_k47; -static PyObject *__pyx_k48; -static PyObject *__pyx_k49; -static PyObject *__pyx_k50; -static PyObject *__pyx_k51; -static PyObject *__pyx_k52; -static PyObject *__pyx_k53; -static PyObject *__pyx_k54; -static PyObject *__pyx_k55; -static PyObject *__pyx_k56; -static PyObject *__pyx_k57; -static PyObject *__pyx_k58; -static PyObject *__pyx_k59; -static PyObject *(__pyx_f_4dnet___memcpy(char (*),PyObject *,int )); /*proto*/ -static PyObject *(__pyx_f_4dnet___oserror(void)); /*proto*/ -static int (__pyx_f_4dnet___arp_callback(struct arp_entry (*),void (*))); /*proto*/ -static PyObject *(__pyx_f_4dnet_ifent_to_dict(struct intf_entry (*))); /*proto*/ -static PyObject *(__pyx_f_4dnet_dict_to_ifent(PyObject *,struct intf_entry (*))); /*proto*/ -static int (__pyx_f_4dnet___intf_callback(struct intf_entry (*),void (*))); /*proto*/ -static int (__pyx_f_4dnet___route_callback(struct route_entry (*),void (*))); /*proto*/ -static PyObject *(__pyx_f_4dnet_rule_to_dict(struct fw_rule (*))); /*proto*/ -static PyObject *(__pyx_f_4dnet_dict_to_rule(PyObject *,struct fw_rule (*))); /*proto*/ -static int (__pyx_f_4dnet___fw_callback(struct fw_rule (*),void (*))); /*proto*/ - -/* Implementation of dnet */ - -static char (__pyx_k1[]) = "Address type (ADDR_TYPE_*) integer."; -static char (__pyx_k2[]) = "Address bitlength integer."; -static char (__pyx_k3[]) = "Raw address string."; -static char (__pyx_k4[]) = "Ethernet MAC address as binary string."; -static char (__pyx_k5[]) = "IPv4 address as binary string."; -static char (__pyx_k6[]) = "IPv6 address as binary string."; -static char (__pyx_k7[]) = "Tunnel interface name."; -static char (__pyx_k8[]) = "File descriptor for tunnel handle."; -static char (__pyx_k9[]) = "Dug Song "; -static char (__pyx_k10[]) = "Copyright (c) 2003 Dug Song"; -static char (__pyx_k12[]) = "http://libdnet.sourceforge.net/"; -static char (__pyx_k13[]) = "1.12"; -static char (__pyx_k14[]) = "\x000\x000\x000\x000\x000\x000"; -static char (__pyx_k15[]) = "\x0ff\x0ff\x0ff\x0ff\x0ff\x0ff"; -static char (__pyx_k19[]) = "\x000\x000\x000\x000"; -static char (__pyx_k20[]) = "\x0ff\x0ff\x0ff\x0ff"; -static char (__pyx_k21[]) = "\x07f\x000\x000\x001"; -static char (__pyx_k22[]) = "\x0e0\x000\x000\x001"; -static char (__pyx_k23[]) = "\x0e0\x000\x000\x0ff"; -static char (__pyx_k32[]) = "\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000"; -static char (__pyx_k33[]) = "\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x000\x001"; - -static PyObject *__pyx_n___author__; -static PyObject *__pyx_n___copyright__; -static PyObject *__pyx_n___license__; -static PyObject *__pyx_n___url__; -static PyObject *__pyx_n___version__; -static PyObject *__pyx_n___iter_append; -static PyObject *__pyx_n_ETH_ADDR_LEN; -static PyObject *__pyx_n_ETH_ADDR_BITS; -static PyObject *__pyx_n_ETH_TYPE_LEN; -static PyObject *__pyx_n_ETH_CRC_LEN; -static PyObject *__pyx_n_ETH_HDR_LEN; -static PyObject *__pyx_n_ETH_LEN_MIN; -static PyObject *__pyx_n_ETH_LEN_MAX; -static PyObject *__pyx_n_ETH_MTU; -static PyObject *__pyx_n_ETH_MIN; -static PyObject *__pyx_n_ETH_TYPE_PUP; -static PyObject *__pyx_n_ETH_TYPE_IP; -static PyObject *__pyx_n_ETH_TYPE_ARP; -static PyObject *__pyx_n_ETH_TYPE_REVARP; -static PyObject *__pyx_n_ETH_TYPE_8021Q; -static PyObject *__pyx_n_ETH_TYPE_IPV6; -static PyObject *__pyx_n_ETH_TYPE_MPLS; -static PyObject *__pyx_n_ETH_TYPE_MPLS_MCAST; -static PyObject *__pyx_n_ETH_TYPE_PPPOEDISC; -static PyObject *__pyx_n_ETH_TYPE_PPPOE; -static PyObject *__pyx_n_ETH_TYPE_LOOPBACK; -static PyObject *__pyx_n_ETH_ADDR_UNSPEC; -static PyObject *__pyx_n_ETH_ADDR_BROADCAST; -static PyObject *__pyx_n_eth_ntoa; -static PyObject *__pyx_n_eth_aton; -static PyObject *__pyx_n_eth_pack_hdr; -static PyObject *__pyx_n_IP_ADDR_LEN; -static PyObject *__pyx_n_IP_ADDR_BITS; -static PyObject *__pyx_n_IP_HDR_LEN; -static PyObject *__pyx_n_IP_OPT_LEN; -static PyObject *__pyx_n_IP_OPT_LEN_MAX; -static PyObject *__pyx_n_IP_HDR_LEN_MAX; -static PyObject *__pyx_n_IP_LEN_MAX; -static PyObject *__pyx_n_IP_LEN_MIN; -static PyObject *__pyx_n_IP_TOS_DEFAULT; -static PyObject *__pyx_n_IP_RF; -static PyObject *__pyx_n_IP_DF; -static PyObject *__pyx_n_IP_MF; -static PyObject *__pyx_n_IP_OFFMASK; -static PyObject *__pyx_n_IP_TTL_DEFAULT; -static PyObject *__pyx_n_IP_TTL_MAX; -static PyObject *__pyx_n_IP_PROTO_IP; -static PyObject *__pyx_n_IP_PROTO_ICMP; -static PyObject *__pyx_n_IP_PROTO_IGMP; -static PyObject *__pyx_n_IP_PROTO_TCP; -static PyObject *__pyx_n_IP_PROTO_UDP; -static PyObject *__pyx_n_IP_PROTO_IPV6; -static PyObject *__pyx_n_IP_PROTO_GRE; -static PyObject *__pyx_n_IP_PROTO_ESP; -static PyObject *__pyx_n_IP_PROTO_AH; -static PyObject *__pyx_n_IP_PROTO_ICMPV6; -static PyObject *__pyx_n_IP_PROTO_RAW; -static PyObject *__pyx_n_IP_PROTO_RESERVED; -static PyObject *__pyx_n_IP_PROTO_MAX; -static PyObject *__pyx_n_IP_ADDR_ANY; -static PyObject *__pyx_n_IP_ADDR_BROADCAST; -static PyObject *__pyx_n_IP_ADDR_LOOPBACK; -static PyObject *__pyx_n_IP_ADDR_MCAST_ALL; -static PyObject *__pyx_n_IP_ADDR_MCAST_LOCAL; -static PyObject *__pyx_n_ip_ntoa; -static PyObject *__pyx_n_ip_aton; -static PyObject *__pyx_n_ip_checksum; -static PyObject *__pyx_n_ip_cksum_add; -static PyObject *__pyx_n_ip_cksum_carry; -static PyObject *__pyx_n_ip_pack_hdr; -static PyObject *__pyx_n_IP6_ADDR_LEN; -static PyObject *__pyx_n_IP6_ADDR_BITS; -static PyObject *__pyx_n_IP6_HDR_LEN; -static PyObject *__pyx_n_IP6_LEN_MIN; -static PyObject *__pyx_n_IP6_LEN_MAX; -static PyObject *__pyx_n_IP6_MTU_MIN; -static PyObject *__pyx_n_IP6_HLIM_DEFAULT; -static PyObject *__pyx_n_IP6_HLIM_MAX; -static PyObject *__pyx_n_IP6_ADDR_UNSPEC; -static PyObject *__pyx_n_IP6_ADDR_LOOPBACK; -static PyObject *__pyx_n_ip6_ntoa; -static PyObject *__pyx_n_ip6_aton; -static PyObject *__pyx_n_ip6_checksum; -static PyObject *__pyx_n_ip6_pack_hdr; -static PyObject *__pyx_n_ADDR_TYPE_NONE; -static PyObject *__pyx_n_ADDR_TYPE_ETH; -static PyObject *__pyx_n_ADDR_TYPE_IP; -static PyObject *__pyx_n_ADDR_TYPE_IP6; -static PyObject *__pyx_n_ARP_HDR_LEN; -static PyObject *__pyx_n_ARP_ETHIP_LEN; -static PyObject *__pyx_n_ARP_HRD_ETH; -static PyObject *__pyx_n_ARP_HRD_IEEE802; -static PyObject *__pyx_n_ARP_PRO_IP; -static PyObject *__pyx_n_ARP_OP_REQUEST; -static PyObject *__pyx_n_ARP_OP_REPLY; -static PyObject *__pyx_n_ARP_OP_REVREQUEST; -static PyObject *__pyx_n_ARP_OP_REVREPLY; -static PyObject *__pyx_n_arp_pack_hdr_ethip; -static PyObject *__pyx_n_icmp_pack_hdr; -static PyObject *__pyx_n_TCP_HDR_LEN; -static PyObject *__pyx_n_TH_FIN; -static PyObject *__pyx_n_TH_SYN; -static PyObject *__pyx_n_TH_RST; -static PyObject *__pyx_n_TH_PUSH; -static PyObject *__pyx_n_TH_ACK; -static PyObject *__pyx_n_TH_URG; -static PyObject *__pyx_n_TH_ECE; -static PyObject *__pyx_n_TH_CWR; -static PyObject *__pyx_n_TCP_PORT_MAX; -static PyObject *__pyx_n_TCP_WIN_MAX; -static PyObject *__pyx_n_TCP_OPT_EOL; -static PyObject *__pyx_n_TCP_OPT_NOP; -static PyObject *__pyx_n_TCP_OPT_MSS; -static PyObject *__pyx_n_TCP_OPT_WSCALE; -static PyObject *__pyx_n_TCP_OPT_SACKOK; -static PyObject *__pyx_n_TCP_OPT_SACK; -static PyObject *__pyx_n_TCP_OPT_ECHO; -static PyObject *__pyx_n_TCP_OPT_ECHOREPLY; -static PyObject *__pyx_n_TCP_OPT_TIMESTAMP; -static PyObject *__pyx_n_TCP_OPT_POCONN; -static PyObject *__pyx_n_TCP_OPT_POSVC; -static PyObject *__pyx_n_TCP_OPT_CC; -static PyObject *__pyx_n_TCP_OPT_CCNEW; -static PyObject *__pyx_n_TCP_OPT_CCECHO; -static PyObject *__pyx_n_TCP_OPT_ALTSUM; -static PyObject *__pyx_n_TCP_OPT_ALTSUMDATA; -static PyObject *__pyx_n_TCP_OPT_SKEETER; -static PyObject *__pyx_n_TCP_OPT_BUBBA; -static PyObject *__pyx_n_TCP_OPT_TRAILSUM; -static PyObject *__pyx_n_TCP_OPT_MD5; -static PyObject *__pyx_n_TCP_OPT_SCPS; -static PyObject *__pyx_n_TCP_OPT_SNACK; -static PyObject *__pyx_n_TCP_OPT_REC; -static PyObject *__pyx_n_TCP_OPT_CORRUPT; -static PyObject *__pyx_n_TCP_OPT_SNAP; -static PyObject *__pyx_n_TCP_OPT_TCPCOMP; -static PyObject *__pyx_n_TCP_OPT_MAX; -static PyObject *__pyx_n_tcp_pack_hdr; -static PyObject *__pyx_n_UDP_HDR_LEN; -static PyObject *__pyx_n_UDP_PORT_MAX; -static PyObject *__pyx_n_udp_pack_hdr; -static PyObject *__pyx_n_INTF_TYPE_OTHER; -static PyObject *__pyx_n_INTF_TYPE_ETH; -static PyObject *__pyx_n_INTF_TYPE_LOOPBACK; -static PyObject *__pyx_n_INTF_TYPE_TUN; -static PyObject *__pyx_n_INTF_FLAG_UP; -static PyObject *__pyx_n_INTF_FLAG_LOOPBACK; -static PyObject *__pyx_n_INTF_FLAG_POINTOPOINT; -static PyObject *__pyx_n_INTF_FLAG_NOARP; -static PyObject *__pyx_n_INTF_FLAG_BROADCAST; -static PyObject *__pyx_n_INTF_FLAG_MULTICAST; -static PyObject *__pyx_n_FW_OP_ALLOW; -static PyObject *__pyx_n_FW_OP_BLOCK; -static PyObject *__pyx_n_FW_DIR_IN; -static PyObject *__pyx_n_FW_DIR_OUT; -static PyObject *__pyx_n_BSD; - -static PyObject *__pyx_k9p; -static PyObject *__pyx_k10p; -static PyObject *__pyx_k12p; -static PyObject *__pyx_k13p; - -static PyObject *__pyx_n_ValueError; - -static PyObject *__pyx_k60p; - -static char (__pyx_k60[]) = "not a %d-byte binary string: %r"; - -static PyObject *__pyx_f_4dnet___memcpy(char (*__pyx_v_dst),PyObject *__pyx_v_src,int __pyx_v_n) { - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - char (*__pyx_5); - Py_INCREF(__pyx_v_src); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":44 */ - __pyx_1 = (PyBytes_Size(__pyx_v_src) != __pyx_v_n); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":45 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} - __pyx_3 = PyLong_FromLong(__pyx_v_n); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); - Py_INCREF(__pyx_v_src); - PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_src); - __pyx_3 = 0; - __pyx_3 = PyNumber_Remainder(__pyx_k60p, __pyx_4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":46 */ - __pyx_5 = PyBytes_AsString(__pyx_v_src); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; goto __pyx_L1;} - memcpy(__pyx_v_dst,__pyx_5,__pyx_v_n); - - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_f_4dnet___memcpy(char *, PyObject *, int); /*proto*/ +static PyObject *__pyx_f_4dnet___oserror(void); /*proto*/ +static int __pyx_f_4dnet___arp_callback(struct arp_entry *, void *); /*proto*/ +static PyObject *__pyx_f_4dnet_ifent_to_dict(struct intf_entry *); /*proto*/ +static PyObject *__pyx_f_4dnet_dict_to_ifent(PyObject *, struct intf_entry *); /*proto*/ +static int __pyx_f_4dnet___intf_callback(struct intf_entry *, void *); /*proto*/ +static int __pyx_f_4dnet___route_callback(struct route_entry *, void *); /*proto*/ +static PyObject *__pyx_f_4dnet_rule_to_dict(struct fw_rule *); /*proto*/ +static PyObject *__pyx_f_4dnet_dict_to_rule(PyObject *, struct fw_rule *); /*proto*/ +static int __pyx_f_4dnet___fw_callback(struct fw_rule *, void *); /*proto*/ +static PyObject *__pyx_f_4dnet___pyx_unpickle___addr_ip4_iter__set_state(struct __pyx_obj_4dnet___addr_ip4_iter *, PyObject *); /*proto*/ +#define __Pyx_MODULE_NAME "dnet" +extern int __pyx_module_is_main_dnet; +int __pyx_module_is_main_dnet = 0; + +/* Implementation of 'dnet' */ +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_OSError; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_OverflowError; +static PyObject *__pyx_builtin_NotImplementedError; +static PyObject *__pyx_builtin_StopIteration; +static const char __pyx_k_d[] = "d"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_l[] = "l"; +static const char __pyx_k_n[] = "n"; +static const char __pyx_k_p[] = "p"; +static const char __pyx_k_r[] = "r"; +static const char __pyx_k_s[] = "s"; +static const char __pyx_k_dh[] = "dh"; +static const char __pyx_k_dp[] = "dp"; +static const char __pyx_k_ea[] = "ea"; +static const char __pyx_k_fc[] = "fc"; +static const char __pyx_k_fl[] = "fl"; +static const char __pyx_k_fw[] = "fw"; +static const char __pyx_k_gw[] = "gw"; +static const char __pyx_k_ha[] = "ha"; +static const char __pyx_k_ia[] = "ia"; +static const char __pyx_k_id[] = "id"; +static const char __pyx_k_ip[] = "ip"; +static const char __pyx_k_op[] = "op"; +static const char __pyx_k_pa[] = "pa"; +static const char __pyx_k_sh[] = "sh"; +static const char __pyx_k_sp[] = "sp"; +static const char __pyx_k_BSD[] = "BSD"; +static const char __pyx_k_ack[] = "ack"; +static const char __pyx_k_arg[] = "arg"; +static const char __pyx_k_arp[] = "arp"; +static const char __pyx_k_buf[] = "buf"; +static const char __pyx_k_cur[] = "cur"; +static const char __pyx_k_dha[] = "dha"; +static const char __pyx_k_dir[] = "dir"; +static const char __pyx_k_dpa[] = "dpa"; +static const char __pyx_k_dst[] = "dst"; +static const char __pyx_k_eth[] = "eth"; +static const char __pyx_k_hdr[] = "hdr"; +static const char __pyx_k_int[] = "__int__"; +static const char __pyx_k_ip6[] = "ip6"; +static const char __pyx_k_len[] = "len"; +static const char __pyx_k_max[] = "max"; +static const char __pyx_k_mtu[] = "mtu"; +static const char __pyx_k_new[] = "__new__"; +static const char __pyx_k_nxt[] = "nxt"; +static const char __pyx_k_off[] = "off"; +static const char __pyx_k_pkt[] = "pkt"; +static const char __pyx_k_seq[] = "seq"; +static const char __pyx_k_sha[] = "sha"; +static const char __pyx_k_spa[] = "spa"; +static const char __pyx_k_src[] = "src"; +static const char __pyx_k_sum[] = "sum"; +static const char __pyx_k_tos[] = "tos"; +static const char __pyx_k_ttl[] = "ttl"; +static const char __pyx_k_tun[] = "tun"; +static const char __pyx_k_url[] = "__url__"; +static const char __pyx_k_urp[] = "urp"; +static const char __pyx_k_win[] = "win"; +static const char __pyx_k_1_16[] = "1.16"; +static const char __pyx_k_addr[] = "addr"; +static const char __pyx_k_code[] = "code"; +static const char __pyx_k_copy[] = "__copy__"; +static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_dnet[] = "dnet"; +static const char __pyx_k_hlim[] = "hlim"; +static const char __pyx_k_intf[] = "intf"; +static const char __pyx_k_loop[] = "loop"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_name[] = "name"; +static const char __pyx_k_plen[] = "plen"; +static const char __pyx_k_rand[] = "rand"; +static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_type[] = "type"; +static const char __pyx_k_ulen[] = "ulen"; +static const char __pyx_k_IP_DF[] = "IP_DF"; +static const char __pyx_k_IP_MF[] = "IP_MF"; +static const char __pyx_k_IP_RF[] = "IP_RF"; +static const char __pyx_k_dport[] = "dport"; +static const char __pyx_k_entry[] = "entry"; +static const char __pyx_k_etype[] = "etype"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_itype[] = "itype"; +static const char __pyx_k_not_a[] = "not a "; +static const char __pyx_k_proto[] = "proto"; +static const char __pyx_k_route[] = "route"; +static const char __pyx_k_sport[] = "sport"; +static const char __pyx_k_start[] = "start"; +static const char __pyx_k_TH_ACK[] = "TH_ACK"; +static const char __pyx_k_TH_CWR[] = "TH_CWR"; +static const char __pyx_k_TH_ECE[] = "TH_ECE"; +static const char __pyx_k_TH_FIN[] = "TH_FIN"; +static const char __pyx_k_TH_RST[] = "TH_RST"; +static const char __pyx_k_TH_SYN[] = "TH_SYN"; +static const char __pyx_k_TH_URG[] = "TH_URG"; +static const char __pyx_k_append[] = "append"; +static const char __pyx_k_author[] = "__author__"; +static const char __pyx_k_device[] = "device"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_pickle[] = "pickle"; +static const char __pyx_k_reduce[] = "__reduce__"; +static const char __pyx_k_update[] = "update"; +static const char __pyx_k_ETH_MIN[] = "ETH_MIN"; +static const char __pyx_k_ETH_MTU[] = "ETH_MTU"; +static const char __pyx_k_OSError[] = "OSError"; +static const char __pyx_k_TH_PUSH[] = "TH_PUSH"; +static const char __pyx_k_addrtxt[] = "addrtxt"; +static const char __pyx_k_ip_aton[] = "ip_aton"; +static const char __pyx_k_ip_ntoa[] = "ip_ntoa"; +static const char __pyx_k_license[] = "__license__"; +static const char __pyx_k_version[] = "__version__"; +static const char __pyx_k_addrtype[] = "addrtype"; +static const char __pyx_k_callback[] = "callback"; +static const char __pyx_k_dnet_pyx[] = "dnet.pyx"; +static const char __pyx_k_dst_addr[] = "dst_addr"; +static const char __pyx_k_eth_aton[] = "eth_aton"; +static const char __pyx_k_eth_ntoa[] = "eth_ntoa"; +static const char __pyx_k_getstate[] = "__getstate__"; +static const char __pyx_k_ip6_aton[] = "ip6_aton"; +static const char __pyx_k_ip6_ntoa[] = "ip6_ntoa"; +static const char __pyx_k_pyx_type[] = "__pyx_type"; +static const char __pyx_k_setstate[] = "__setstate__"; +static const char __pyx_k_FW_DIR_IN[] = "FW_DIR_IN"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_copyright[] = "__copyright__"; +static const char __pyx_k_link_addr[] = "link_addr"; +static const char __pyx_k_pyx_state[] = "__pyx_state"; +static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; +static const char __pyx_k_ARP_PRO_IP[] = "ARP_PRO_IP"; +static const char __pyx_k_FW_DIR_OUT[] = "FW_DIR_OUT"; +static const char __pyx_k_IP_HDR_LEN[] = "IP_HDR_LEN"; +static const char __pyx_k_IP_LEN_MAX[] = "IP_LEN_MAX"; +static const char __pyx_k_IP_LEN_MIN[] = "IP_LEN_MIN"; +static const char __pyx_k_IP_OFFMASK[] = "IP_OFFMASK"; +static const char __pyx_k_IP_OPT_LEN[] = "IP_OPT_LEN"; +static const char __pyx_k_IP_TTL_MAX[] = "IP_TTL_MAX"; +static const char __pyx_k_TCP_OPT_CC[] = "TCP_OPT_CC"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_pyx_result[] = "__pyx_result"; +static const char __pyx_k_ARP_HDR_LEN[] = "ARP_HDR_LEN"; +static const char __pyx_k_ARP_HRD_ETH[] = "ARP_HRD_ETH"; +static const char __pyx_k_ETH_CRC_LEN[] = "ETH_CRC_LEN"; +static const char __pyx_k_ETH_HDR_LEN[] = "ETH_HDR_LEN"; +static const char __pyx_k_ETH_LEN_MAX[] = "ETH_LEN_MAX"; +static const char __pyx_k_ETH_LEN_MIN[] = "ETH_LEN_MIN"; +static const char __pyx_k_ETH_TYPE_IP[] = "ETH_TYPE_IP"; +static const char __pyx_k_FW_OP_ALLOW[] = "FW_OP_ALLOW"; +static const char __pyx_k_FW_OP_BLOCK[] = "FW_OP_BLOCK"; +static const char __pyx_k_IP6_HDR_LEN[] = "IP6_HDR_LEN"; +static const char __pyx_k_IP6_LEN_MAX[] = "IP6_LEN_MAX"; +static const char __pyx_k_IP6_LEN_MIN[] = "IP6_LEN_MIN"; +static const char __pyx_k_IP6_MTU_MIN[] = "IP6_MTU_MIN"; +static const char __pyx_k_IP_ADDR_ANY[] = "IP_ADDR_ANY"; +static const char __pyx_k_IP_ADDR_LEN[] = "IP_ADDR_LEN"; +static const char __pyx_k_IP_PROTO_AH[] = "IP_PROTO_AH"; +static const char __pyx_k_IP_PROTO_IP[] = "IP_PROTO_IP"; +static const char __pyx_k_PickleError[] = "PickleError"; +static const char __pyx_k_TCP_HDR_LEN[] = "TCP_HDR_LEN"; +static const char __pyx_k_TCP_OPT_EOL[] = "TCP_OPT_EOL"; +static const char __pyx_k_TCP_OPT_MAX[] = "TCP_OPT_MAX"; +static const char __pyx_k_TCP_OPT_MD5[] = "TCP_OPT_MD5"; +static const char __pyx_k_TCP_OPT_MSS[] = "TCP_OPT_MSS"; +static const char __pyx_k_TCP_OPT_NOP[] = "TCP_OPT_NOP"; +static const char __pyx_k_TCP_OPT_REC[] = "TCP_OPT_REC"; +static const char __pyx_k_TCP_WIN_MAX[] = "TCP_WIN_MAX"; +static const char __pyx_k_UDP_HDR_LEN[] = "UDP_HDR_LEN"; +static const char __pyx_k_alias_addrs[] = "alias_addrs"; +static const char __pyx_k_ip_checksum[] = "ip_checksum"; +static const char __pyx_k_ip_pack_hdr[] = "ip_pack_hdr"; +static const char __pyx_k_iter_append[] = "__iter_append"; +static const char __pyx_k_rand_xrange[] = "__rand_xrange"; +static const char __pyx_k_ADDR_TYPE_IP[] = "ADDR_TYPE_IP"; +static const char __pyx_k_ARP_OP_REPLY[] = "ARP_OP_REPLY"; +static const char __pyx_k_ETH_ADDR_LEN[] = "ETH_ADDR_LEN"; +static const char __pyx_k_ETH_TYPE_ARP[] = "ETH_TYPE_ARP"; +static const char __pyx_k_ETH_TYPE_LEN[] = "ETH_TYPE_LEN"; +static const char __pyx_k_ETH_TYPE_PUP[] = "ETH_TYPE_PUP"; +static const char __pyx_k_INTF_FLAG_UP[] = "INTF_FLAG_UP"; +static const char __pyx_k_IP6_ADDR_LEN[] = "IP6_ADDR_LEN"; +static const char __pyx_k_IP6_HLIM_MAX[] = "IP6_HLIM_MAX"; +static const char __pyx_k_IP_ADDR_BITS[] = "IP_ADDR_BITS"; +static const char __pyx_k_IP_PROTO_ESP[] = "IP_PROTO_ESP"; +static const char __pyx_k_IP_PROTO_GRE[] = "IP_PROTO_GRE"; +static const char __pyx_k_IP_PROTO_MAX[] = "IP_PROTO_MAX"; +static const char __pyx_k_IP_PROTO_RAW[] = "IP_PROTO_RAW"; +static const char __pyx_k_IP_PROTO_TCP[] = "IP_PROTO_TCP"; +static const char __pyx_k_IP_PROTO_UDP[] = "IP_PROTO_UDP"; +static const char __pyx_k_TCP_OPT_ECHO[] = "TCP_OPT_ECHO"; +static const char __pyx_k_TCP_OPT_SACK[] = "TCP_OPT_SACK"; +static const char __pyx_k_TCP_OPT_SCPS[] = "TCP_OPT_SCPS"; +static const char __pyx_k_TCP_OPT_SNAP[] = "TCP_OPT_SNAP"; +static const char __pyx_k_TCP_PORT_MAX[] = "TCP_PORT_MAX"; +static const char __pyx_k_UDP_PORT_MAX[] = "UDP_PORT_MAX"; +static const char __pyx_k_eth_pack_hdr[] = "eth_pack_hdr"; +static const char __pyx_k_ip6_checksum[] = "ip6_checksum"; +static const char __pyx_k_ip6_pack_hdr[] = "ip6_pack_hdr"; +static const char __pyx_k_ip_cksum_add[] = "ip_cksum_add"; +static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; +static const char __pyx_k_stringsource[] = "stringsource"; +static const char __pyx_k_tcp_pack_hdr[] = "tcp_pack_hdr"; +static const char __pyx_k_udp_pack_hdr[] = "udp_pack_hdr"; +static const char __pyx_k_ADDR_TYPE_ETH[] = "ADDR_TYPE_ETH"; +static const char __pyx_k_ADDR_TYPE_IP6[] = "ADDR_TYPE_IP6"; +static const char __pyx_k_ARP_ETHIP_LEN[] = "ARP_ETHIP_LEN"; +static const char __pyx_k_ETH_ADDR_BITS[] = "ETH_ADDR_BITS"; +static const char __pyx_k_ETH_TYPE_IPV6[] = "ETH_TYPE_IPV6"; +static const char __pyx_k_ETH_TYPE_MPLS[] = "ETH_TYPE_MPLS"; +static const char __pyx_k_INTF_TYPE_ETH[] = "INTF_TYPE_ETH"; +static const char __pyx_k_INTF_TYPE_TUN[] = "INTF_TYPE_TUN"; +static const char __pyx_k_IP6_ADDR_BITS[] = "IP6_ADDR_BITS"; +static const char __pyx_k_IP_PROTO_ICMP[] = "IP_PROTO_ICMP"; +static const char __pyx_k_IP_PROTO_IGMP[] = "IP_PROTO_IGMP"; +static const char __pyx_k_IP_PROTO_IPV6[] = "IP_PROTO_IPV6"; +static const char __pyx_k_OverflowError[] = "OverflowError"; +static const char __pyx_k_StopIteration[] = "StopIteration"; +static const char __pyx_k_TCP_OPT_BUBBA[] = "TCP_OPT_BUBBA"; +static const char __pyx_k_TCP_OPT_CCNEW[] = "TCP_OPT_CCNEW"; +static const char __pyx_k_TCP_OPT_POSVC[] = "TCP_OPT_POSVC"; +static const char __pyx_k_TCP_OPT_SNACK[] = "TCP_OPT_SNACK"; +static const char __pyx_k_addr_ip4_iter[] = "__addr_ip4_iter"; +static const char __pyx_k_icmp_pack_hdr[] = "icmp_pack_hdr"; +static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; +static const char __pyx_k_ADDR_TYPE_NONE[] = "ADDR_TYPE_NONE"; +static const char __pyx_k_ARP_OP_REQUEST[] = "ARP_OP_REQUEST"; +static const char __pyx_k_ETH_TYPE_8021Q[] = "ETH_TYPE_8021Q"; +static const char __pyx_k_ETH_TYPE_PPPOE[] = "ETH_TYPE_PPPOE"; +static const char __pyx_k_IP_HDR_LEN_MAX[] = "IP_HDR_LEN_MAX"; +static const char __pyx_k_IP_OPT_LEN_MAX[] = "IP_OPT_LEN_MAX"; +static const char __pyx_k_IP_TOS_DEFAULT[] = "IP_TOS_DEFAULT"; +static const char __pyx_k_IP_TTL_DEFAULT[] = "IP_TTL_DEFAULT"; +static const char __pyx_k_TCP_OPT_ALTSUM[] = "TCP_OPT_ALTSUM"; +static const char __pyx_k_TCP_OPT_CCECHO[] = "TCP_OPT_CCECHO"; +static const char __pyx_k_TCP_OPT_POCONN[] = "TCP_OPT_POCONN"; +static const char __pyx_k_TCP_OPT_SACKOK[] = "TCP_OPT_SACKOK"; +static const char __pyx_k_TCP_OPT_WSCALE[] = "TCP_OPT_WSCALE"; +static const char __pyx_k_ip_cksum_carry[] = "ip_cksum_carry"; +static const char __pyx_k_non_IP_address[] = "non-IP address"; +static const char __pyx_k_ARP_HRD_IEEE802[] = "ARP_HRD_IEEE802"; +static const char __pyx_k_ARP_OP_REVREPLY[] = "ARP_OP_REVREPLY"; +static const char __pyx_k_ETH_ADDR_UNSPEC[] = "ETH_ADDR_UNSPEC"; +static const char __pyx_k_ETH_TYPE_REVARP[] = "ETH_TYPE_REVARP"; +static const char __pyx_k_INTF_FLAG_NOARP[] = "INTF_FLAG_NOARP"; +static const char __pyx_k_INTF_TYPE_OTHER[] = "INTF_TYPE_OTHER"; +static const char __pyx_k_IP6_ADDR_UNSPEC[] = "IP6_ADDR_UNSPEC"; +static const char __pyx_k_IP_PROTO_ICMPV6[] = "IP_PROTO_ICMPV6"; +static const char __pyx_k_TCP_OPT_CORRUPT[] = "TCP_OPT_CORRUPT"; +static const char __pyx_k_TCP_OPT_SKEETER[] = "TCP_OPT_SKEETER"; +static const char __pyx_k_TCP_OPT_TCPCOMP[] = "TCP_OPT_TCPCOMP"; +static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; +static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; +static const char __pyx_k_IP6_HLIM_DEFAULT[] = "IP6_HLIM_DEFAULT"; +static const char __pyx_k_IP_ADDR_LOOPBACK[] = "IP_ADDR_LOOPBACK"; +static const char __pyx_k_TCP_OPT_TRAILSUM[] = "TCP_OPT_TRAILSUM"; +static const char __pyx_k_non_IPv6_address[] = "non-IPv6 address"; +static const char __pyx_k_ARP_OP_REVREQUEST[] = "ARP_OP_REVREQUEST"; +static const char __pyx_k_ETH_TYPE_LOOPBACK[] = "ETH_TYPE_LOOPBACK"; +static const char __pyx_k_IP6_ADDR_LOOPBACK[] = "IP6_ADDR_LOOPBACK"; +static const char __pyx_k_IP_ADDR_BROADCAST[] = "IP_ADDR_BROADCAST"; +static const char __pyx_k_IP_ADDR_MCAST_ALL[] = "IP_ADDR_MCAST_ALL"; +static const char __pyx_k_IP_PROTO_RESERVED[] = "IP_PROTO_RESERVED"; +static const char __pyx_k_TCP_OPT_ECHOREPLY[] = "TCP_OPT_ECHOREPLY"; +static const char __pyx_k_TCP_OPT_TIMESTAMP[] = "TCP_OPT_TIMESTAMP"; +static const char __pyx_k_ETH_ADDR_BROADCAST[] = "ETH_ADDR_BROADCAST"; +static const char __pyx_k_ETH_TYPE_PPPOEDISC[] = "ETH_TYPE_PPPOEDISC"; +static const char __pyx_k_INTF_FLAG_LOOPBACK[] = "INTF_FLAG_LOOPBACK"; +static const char __pyx_k_INTF_TYPE_LOOPBACK[] = "INTF_TYPE_LOOPBACK"; +static const char __pyx_k_TCP_OPT_ALTSUMDATA[] = "TCP_OPT_ALTSUMDATA"; +static const char __pyx_k_arp_pack_hdr_ethip[] = "arp_pack_hdr_ethip"; +static const char __pyx_k_byte_binary_string[] = "-byte binary string: "; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_invalid_IP_address[] = "invalid IP address"; +static const char __pyx_k_ETH_TYPE_MPLS_MCAST[] = "ETH_TYPE_MPLS_MCAST"; +static const char __pyx_k_INTF_FLAG_BROADCAST[] = "INTF_FLAG_BROADCAST"; +static const char __pyx_k_INTF_FLAG_MULTICAST[] = "INTF_FLAG_MULTICAST"; +static const char __pyx_k_IP_ADDR_MCAST_LOCAL[] = "IP_ADDR_MCAST_LOCAL"; +static const char __pyx_k_NotImplementedError[] = "NotImplementedError"; +static const char __pyx_k_not_a_4_byte_string[] = "not a 4-byte string"; +static const char __pyx_k_not_a_6_byte_string[] = "not a 6-byte string"; +static const char __pyx_k_invalid_IPv6_address[] = "invalid IPv6 address"; +static const char __pyx_k_non_Ethernet_address[] = "non-Ethernet address"; +static const char __pyx_k_not_a_16_byte_string[] = "not a 16-byte string"; +static const char __pyx_k_INTF_FLAG_POINTOPOINT[] = "INTF_FLAG_POINTOPOINT"; +static const char __pyx_k_invalid_network_address[] = "invalid network address"; +static const char __pyx_k_stop_must_be_an_integer[] = "stop must be an integer"; +static const char __pyx_k_invalid_Ethernet_address[] = "invalid Ethernet address"; +static const char __pyx_k_start_must_be_an_integer[] = "start must be an integer"; +static const char __pyx_k_invalid_network_address_2[] = ""; +static const char __pyx_k_Copyright_c_2022_Oliver_Falk[] = "Copyright (c) 2022 Oliver Falk"; +static const char __pyx_k_pyx_unpickle___addr_ip4_iter[] = "__pyx_unpickle___addr_ip4_iter"; +static const char __pyx_k_https_github_com_ofalk_libdnet[] = "https://github.com/ofalk/libdnet"; +static const char __pyx_k_Oliver_Falk_oliver_linux_kernel[] = "Oliver Falk "; +static const char __pyx_k_Pickling_of_struct_members_such[] = "Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)"; +static const char __pyx_k_self_arp_cannot_be_converted_to[] = "self.arp cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_eth_cannot_be_converted_to[] = "self.eth cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_tun_cannot_be_converted_to[] = "self.tun cannot be converted to a Python object for pickling"; +static const char __pyx_k_Incompatible_checksums_s_vs_0xd0[] = "Incompatible checksums (%s vs 0xd0a7020 = (cur, max))"; +static const char __pyx_k_dumb_networking_library_This_mod[] = "dumb networking library\n\nThis module provides a simplified interface to several low-level\nnetworking routines, including network address manipulation, kernel\narp(4) cache and route(4) table lookup and manipulation, network\nfirewalling, network interface lookup and manipulation, IP tunnelling,\nand raw IP packet and Ethernet frame transmission.\n"; +static const char __pyx_k_self_fw_cannot_be_converted_to_a[] = "self.fw cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_intf_cannot_be_converted_to[] = "self.intf cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_ip_cannot_be_converted_to_a[] = "self.ip cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_rand_cannot_be_converted_to[] = "self.rand cannot be converted to a Python object for pickling"; +static const char __pyx_k_self_route_cannot_be_converted_t[] = "self.route cannot be converted to a Python object for pickling"; +static PyObject *__pyx_kp_u_1_16; +static PyObject *__pyx_n_s_ADDR_TYPE_ETH; +static PyObject *__pyx_n_s_ADDR_TYPE_IP; +static PyObject *__pyx_n_s_ADDR_TYPE_IP6; +static PyObject *__pyx_n_s_ADDR_TYPE_NONE; +static PyObject *__pyx_n_s_ARP_ETHIP_LEN; +static PyObject *__pyx_n_s_ARP_HDR_LEN; +static PyObject *__pyx_n_s_ARP_HRD_ETH; +static PyObject *__pyx_n_s_ARP_HRD_IEEE802; +static PyObject *__pyx_n_s_ARP_OP_REPLY; +static PyObject *__pyx_n_s_ARP_OP_REQUEST; +static PyObject *__pyx_n_s_ARP_OP_REVREPLY; +static PyObject *__pyx_n_s_ARP_OP_REVREQUEST; +static PyObject *__pyx_n_s_ARP_PRO_IP; +static PyObject *__pyx_n_u_BSD; +static PyObject *__pyx_kp_u_Copyright_c_2022_Oliver_Falk; +static PyObject *__pyx_n_s_ETH_ADDR_BITS; +static PyObject *__pyx_n_s_ETH_ADDR_BROADCAST; +static PyObject *__pyx_n_s_ETH_ADDR_LEN; +static PyObject *__pyx_n_s_ETH_ADDR_UNSPEC; +static PyObject *__pyx_n_s_ETH_CRC_LEN; +static PyObject *__pyx_n_s_ETH_HDR_LEN; +static PyObject *__pyx_n_s_ETH_LEN_MAX; +static PyObject *__pyx_n_s_ETH_LEN_MIN; +static PyObject *__pyx_n_s_ETH_MIN; +static PyObject *__pyx_n_s_ETH_MTU; +static PyObject *__pyx_n_s_ETH_TYPE_8021Q; +static PyObject *__pyx_n_s_ETH_TYPE_ARP; +static PyObject *__pyx_n_s_ETH_TYPE_IP; +static PyObject *__pyx_n_s_ETH_TYPE_IPV6; +static PyObject *__pyx_n_s_ETH_TYPE_LEN; +static PyObject *__pyx_n_s_ETH_TYPE_LOOPBACK; +static PyObject *__pyx_n_s_ETH_TYPE_MPLS; +static PyObject *__pyx_n_s_ETH_TYPE_MPLS_MCAST; +static PyObject *__pyx_n_s_ETH_TYPE_PPPOE; +static PyObject *__pyx_n_s_ETH_TYPE_PPPOEDISC; +static PyObject *__pyx_n_s_ETH_TYPE_PUP; +static PyObject *__pyx_n_s_ETH_TYPE_REVARP; +static PyObject *__pyx_n_s_FW_DIR_IN; +static PyObject *__pyx_n_s_FW_DIR_OUT; +static PyObject *__pyx_n_s_FW_OP_ALLOW; +static PyObject *__pyx_n_s_FW_OP_BLOCK; +static PyObject *__pyx_n_s_INTF_FLAG_BROADCAST; +static PyObject *__pyx_n_s_INTF_FLAG_LOOPBACK; +static PyObject *__pyx_n_s_INTF_FLAG_MULTICAST; +static PyObject *__pyx_n_s_INTF_FLAG_NOARP; +static PyObject *__pyx_n_s_INTF_FLAG_POINTOPOINT; +static PyObject *__pyx_n_s_INTF_FLAG_UP; +static PyObject *__pyx_n_s_INTF_TYPE_ETH; +static PyObject *__pyx_n_s_INTF_TYPE_LOOPBACK; +static PyObject *__pyx_n_s_INTF_TYPE_OTHER; +static PyObject *__pyx_n_s_INTF_TYPE_TUN; +static PyObject *__pyx_n_s_IP6_ADDR_BITS; +static PyObject *__pyx_n_s_IP6_ADDR_LEN; +static PyObject *__pyx_n_s_IP6_ADDR_LOOPBACK; +static PyObject *__pyx_n_s_IP6_ADDR_UNSPEC; +static PyObject *__pyx_n_s_IP6_HDR_LEN; +static PyObject *__pyx_n_s_IP6_HLIM_DEFAULT; +static PyObject *__pyx_n_s_IP6_HLIM_MAX; +static PyObject *__pyx_n_s_IP6_LEN_MAX; +static PyObject *__pyx_n_s_IP6_LEN_MIN; +static PyObject *__pyx_n_s_IP6_MTU_MIN; +static PyObject *__pyx_n_s_IP_ADDR_ANY; +static PyObject *__pyx_n_s_IP_ADDR_BITS; +static PyObject *__pyx_n_s_IP_ADDR_BROADCAST; +static PyObject *__pyx_n_s_IP_ADDR_LEN; +static PyObject *__pyx_n_s_IP_ADDR_LOOPBACK; +static PyObject *__pyx_n_s_IP_ADDR_MCAST_ALL; +static PyObject *__pyx_n_s_IP_ADDR_MCAST_LOCAL; +static PyObject *__pyx_n_s_IP_DF; +static PyObject *__pyx_n_s_IP_HDR_LEN; +static PyObject *__pyx_n_s_IP_HDR_LEN_MAX; +static PyObject *__pyx_n_s_IP_LEN_MAX; +static PyObject *__pyx_n_s_IP_LEN_MIN; +static PyObject *__pyx_n_s_IP_MF; +static PyObject *__pyx_n_s_IP_OFFMASK; +static PyObject *__pyx_n_s_IP_OPT_LEN; +static PyObject *__pyx_n_s_IP_OPT_LEN_MAX; +static PyObject *__pyx_n_s_IP_PROTO_AH; +static PyObject *__pyx_n_s_IP_PROTO_ESP; +static PyObject *__pyx_n_s_IP_PROTO_GRE; +static PyObject *__pyx_n_s_IP_PROTO_ICMP; +static PyObject *__pyx_n_s_IP_PROTO_ICMPV6; +static PyObject *__pyx_n_s_IP_PROTO_IGMP; +static PyObject *__pyx_n_s_IP_PROTO_IP; +static PyObject *__pyx_n_s_IP_PROTO_IPV6; +static PyObject *__pyx_n_s_IP_PROTO_MAX; +static PyObject *__pyx_n_s_IP_PROTO_RAW; +static PyObject *__pyx_n_s_IP_PROTO_RESERVED; +static PyObject *__pyx_n_s_IP_PROTO_TCP; +static PyObject *__pyx_n_s_IP_PROTO_UDP; +static PyObject *__pyx_n_s_IP_RF; +static PyObject *__pyx_n_s_IP_TOS_DEFAULT; +static PyObject *__pyx_n_s_IP_TTL_DEFAULT; +static PyObject *__pyx_n_s_IP_TTL_MAX; +static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd0; +static PyObject *__pyx_n_s_NotImplementedError; +static PyObject *__pyx_n_s_OSError; +static PyObject *__pyx_kp_u_Oliver_Falk_oliver_linux_kernel; +static PyObject *__pyx_n_s_OverflowError; +static PyObject *__pyx_n_s_PickleError; +static PyObject *__pyx_kp_s_Pickling_of_struct_members_such; +static PyObject *__pyx_n_s_StopIteration; +static PyObject *__pyx_n_s_TCP_HDR_LEN; +static PyObject *__pyx_n_s_TCP_OPT_ALTSUM; +static PyObject *__pyx_n_s_TCP_OPT_ALTSUMDATA; +static PyObject *__pyx_n_s_TCP_OPT_BUBBA; +static PyObject *__pyx_n_s_TCP_OPT_CC; +static PyObject *__pyx_n_s_TCP_OPT_CCECHO; +static PyObject *__pyx_n_s_TCP_OPT_CCNEW; +static PyObject *__pyx_n_s_TCP_OPT_CORRUPT; +static PyObject *__pyx_n_s_TCP_OPT_ECHO; +static PyObject *__pyx_n_s_TCP_OPT_ECHOREPLY; +static PyObject *__pyx_n_s_TCP_OPT_EOL; +static PyObject *__pyx_n_s_TCP_OPT_MAX; +static PyObject *__pyx_n_s_TCP_OPT_MD5; +static PyObject *__pyx_n_s_TCP_OPT_MSS; +static PyObject *__pyx_n_s_TCP_OPT_NOP; +static PyObject *__pyx_n_s_TCP_OPT_POCONN; +static PyObject *__pyx_n_s_TCP_OPT_POSVC; +static PyObject *__pyx_n_s_TCP_OPT_REC; +static PyObject *__pyx_n_s_TCP_OPT_SACK; +static PyObject *__pyx_n_s_TCP_OPT_SACKOK; +static PyObject *__pyx_n_s_TCP_OPT_SCPS; +static PyObject *__pyx_n_s_TCP_OPT_SKEETER; +static PyObject *__pyx_n_s_TCP_OPT_SNACK; +static PyObject *__pyx_n_s_TCP_OPT_SNAP; +static PyObject *__pyx_n_s_TCP_OPT_TCPCOMP; +static PyObject *__pyx_n_s_TCP_OPT_TIMESTAMP; +static PyObject *__pyx_n_s_TCP_OPT_TRAILSUM; +static PyObject *__pyx_n_s_TCP_OPT_WSCALE; +static PyObject *__pyx_n_s_TCP_PORT_MAX; +static PyObject *__pyx_n_s_TCP_WIN_MAX; +static PyObject *__pyx_n_s_TH_ACK; +static PyObject *__pyx_n_s_TH_CWR; +static PyObject *__pyx_n_s_TH_ECE; +static PyObject *__pyx_n_s_TH_FIN; +static PyObject *__pyx_n_s_TH_PUSH; +static PyObject *__pyx_n_s_TH_RST; +static PyObject *__pyx_n_s_TH_SYN; +static PyObject *__pyx_n_s_TH_URG; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_n_s_UDP_HDR_LEN; +static PyObject *__pyx_n_s_UDP_PORT_MAX; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_ack; +static PyObject *__pyx_n_s_addr; +static PyObject *__pyx_n_u_addr; +static PyObject *__pyx_n_s_addr_ip4_iter; +static PyObject *__pyx_n_s_addrtxt; +static PyObject *__pyx_n_s_addrtype; +static PyObject *__pyx_n_u_alias_addrs; +static PyObject *__pyx_n_s_append; +static PyObject *__pyx_n_s_arg; +static PyObject *__pyx_n_s_arp; +static PyObject *__pyx_n_s_arp_pack_hdr_ethip; +static PyObject *__pyx_n_s_author; +static PyObject *__pyx_n_s_buf; +static PyObject *__pyx_kp_u_byte_binary_string; +static PyObject *__pyx_n_s_callback; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_code; +static PyObject *__pyx_n_s_copy; +static PyObject *__pyx_n_s_copyright; +static PyObject *__pyx_n_s_cur; +static PyObject *__pyx_n_s_d; +static PyObject *__pyx_n_u_d; +static PyObject *__pyx_n_s_device; +static PyObject *__pyx_n_u_device; +static PyObject *__pyx_n_s_dh; +static PyObject *__pyx_n_s_dha; +static PyObject *__pyx_n_s_dict; +static PyObject *__pyx_n_u_dir; +static PyObject *__pyx_n_s_dnet; +static PyObject *__pyx_kp_s_dnet_pyx; +static PyObject *__pyx_n_s_dp; +static PyObject *__pyx_n_s_dpa; +static PyObject *__pyx_n_s_dport; +static PyObject *__pyx_n_u_dport; +static PyObject *__pyx_n_s_dst; +static PyObject *__pyx_n_u_dst; +static PyObject *__pyx_n_u_dst_addr; +static PyObject *__pyx_n_s_ea; +static PyObject *__pyx_n_s_entry; +static PyObject *__pyx_n_s_eth; +static PyObject *__pyx_n_s_eth_aton; +static PyObject *__pyx_n_s_eth_ntoa; +static PyObject *__pyx_n_s_eth_pack_hdr; +static PyObject *__pyx_n_s_etype; +static PyObject *__pyx_n_s_fc; +static PyObject *__pyx_n_s_fl; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_u_flags; +static PyObject *__pyx_n_s_fw; +static PyObject *__pyx_n_s_getstate; +static PyObject *__pyx_n_s_gw; +static PyObject *__pyx_n_s_ha; +static PyObject *__pyx_n_s_hdr; +static PyObject *__pyx_n_s_hlim; +static PyObject *__pyx_kp_u_https_github_com_ofalk_libdnet; +static PyObject *__pyx_n_s_i; +static PyObject *__pyx_n_s_ia; +static PyObject *__pyx_n_s_icmp_pack_hdr; +static PyObject *__pyx_n_s_id; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_int; +static PyObject *__pyx_n_s_intf; +static PyObject *__pyx_kp_u_invalid_Ethernet_address; +static PyObject *__pyx_kp_u_invalid_IP_address; +static PyObject *__pyx_kp_u_invalid_IPv6_address; +static PyObject *__pyx_kp_u_invalid_network_address; +static PyObject *__pyx_kp_u_invalid_network_address_2; +static PyObject *__pyx_n_s_ip; +static PyObject *__pyx_n_s_ip6; +static PyObject *__pyx_n_s_ip6_aton; +static PyObject *__pyx_n_s_ip6_checksum; +static PyObject *__pyx_n_s_ip6_ntoa; +static PyObject *__pyx_n_s_ip6_pack_hdr; +static PyObject *__pyx_n_s_ip_aton; +static PyObject *__pyx_n_s_ip_checksum; +static PyObject *__pyx_n_s_ip_cksum_add; +static PyObject *__pyx_n_s_ip_cksum_carry; +static PyObject *__pyx_n_s_ip_ntoa; +static PyObject *__pyx_n_s_ip_pack_hdr; +static PyObject *__pyx_n_s_iter_append; +static PyObject *__pyx_n_s_itype; +static PyObject *__pyx_n_s_l; +static PyObject *__pyx_n_s_len; +static PyObject *__pyx_n_s_license; +static PyObject *__pyx_n_u_link_addr; +static PyObject *__pyx_n_s_loop; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_max; +static PyObject *__pyx_n_s_mtu; +static PyObject *__pyx_n_u_mtu; +static PyObject *__pyx_n_s_n; +static PyObject *__pyx_n_u_name; +static PyObject *__pyx_n_s_name_2; +static PyObject *__pyx_n_s_new; +static PyObject *__pyx_kp_u_non_Ethernet_address; +static PyObject *__pyx_kp_u_non_IP_address; +static PyObject *__pyx_kp_u_non_IPv6_address; +static PyObject *__pyx_kp_u_not_a; +static PyObject *__pyx_kp_u_not_a_16_byte_string; +static PyObject *__pyx_kp_u_not_a_4_byte_string; +static PyObject *__pyx_kp_u_not_a_6_byte_string; +static PyObject *__pyx_n_s_nxt; +static PyObject *__pyx_n_s_off; +static PyObject *__pyx_n_s_op; +static PyObject *__pyx_n_u_op; +static PyObject *__pyx_n_s_p; +static PyObject *__pyx_n_s_pa; +static PyObject *__pyx_n_s_pickle; +static PyObject *__pyx_n_s_pkt; +static PyObject *__pyx_n_s_plen; +static PyObject *__pyx_n_u_proto; +static PyObject *__pyx_n_s_pyx_PickleError; +static PyObject *__pyx_n_s_pyx_checksum; +static PyObject *__pyx_n_s_pyx_result; +static PyObject *__pyx_n_s_pyx_state; +static PyObject *__pyx_n_s_pyx_type; +static PyObject *__pyx_n_s_pyx_unpickle___addr_ip4_iter; +static PyObject *__pyx_n_s_r; +static PyObject *__pyx_n_s_rand; +static PyObject *__pyx_n_s_rand_xrange; +static PyObject *__pyx_n_s_reduce; +static PyObject *__pyx_n_s_reduce_cython; +static PyObject *__pyx_n_s_reduce_ex; +static PyObject *__pyx_n_s_route; +static PyObject *__pyx_n_s_s; +static PyObject *__pyx_kp_s_self_arp_cannot_be_converted_to; +static PyObject *__pyx_kp_s_self_eth_cannot_be_converted_to; +static PyObject *__pyx_kp_s_self_fw_cannot_be_converted_to_a; +static PyObject *__pyx_kp_s_self_intf_cannot_be_converted_to; +static PyObject *__pyx_kp_s_self_ip_cannot_be_converted_to_a; +static PyObject *__pyx_kp_s_self_rand_cannot_be_converted_to; +static PyObject *__pyx_kp_s_self_route_cannot_be_converted_t; +static PyObject *__pyx_kp_s_self_tun_cannot_be_converted_to; +static PyObject *__pyx_n_s_seq; +static PyObject *__pyx_n_s_setstate; +static PyObject *__pyx_n_s_setstate_cython; +static PyObject *__pyx_n_s_sh; +static PyObject *__pyx_n_s_sha; +static PyObject *__pyx_n_s_sp; +static PyObject *__pyx_n_s_spa; +static PyObject *__pyx_n_s_sport; +static PyObject *__pyx_n_u_sport; +static PyObject *__pyx_n_s_src; +static PyObject *__pyx_n_u_src; +static PyObject *__pyx_n_s_start; +static PyObject *__pyx_kp_u_start_must_be_an_integer; +static PyObject *__pyx_n_s_stop; +static PyObject *__pyx_kp_u_stop_must_be_an_integer; +static PyObject *__pyx_kp_s_stringsource; +static PyObject *__pyx_n_s_sum; +static PyObject *__pyx_n_s_tcp_pack_hdr; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_tos; +static PyObject *__pyx_n_s_ttl; +static PyObject *__pyx_n_s_tun; +static PyObject *__pyx_n_u_type; +static PyObject *__pyx_n_s_udp_pack_hdr; +static PyObject *__pyx_n_s_ulen; +static PyObject *__pyx_n_s_update; +static PyObject *__pyx_n_s_url; +static PyObject *__pyx_n_s_urp; +static PyObject *__pyx_n_s_version; +static PyObject *__pyx_n_s_win; +static PyObject *__pyx_pf_4dnet___iter_append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_entry, PyObject *__pyx_v_l); /* proto */ +static int __pyx_pf_4dnet_3eth___init__(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_device); /* proto */ +static PyObject *__pyx_pf_4dnet_3eth_2get(struct __pyx_obj_4dnet_eth *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3eth_4set(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_3eth_6send(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_frame); /* proto */ +static void __pyx_pf_4dnet_3eth_8__dealloc__(struct __pyx_obj_4dnet_eth *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3eth_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_eth *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3eth_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_eth *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_4dnet_2eth_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_4eth_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_6eth_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src, PyObject *__pyx_v_etype); /* proto */ +static int __pyx_pf_4dnet_2ip___init__(struct __pyx_obj_4dnet_ip *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2ip_2send(struct __pyx_obj_4dnet_ip *__pyx_v_self, PyObject *__pyx_v_pkt); /* proto */ +static void __pyx_pf_4dnet_2ip_4__dealloc__(struct __pyx_obj_4dnet_ip *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2ip_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_ip *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2ip_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_ip *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_4dnet_8ip_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_10ip_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_12ip_checksum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pkt); /* proto */ +static PyObject *__pyx_pf_4dnet_14ip_cksum_add(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf, int __pyx_v_sum); /* proto */ +static PyObject *__pyx_pf_4dnet_16ip_cksum_carry(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_sum); /* proto */ +static PyObject *__pyx_pf_4dnet_18ip_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tos, PyObject *__pyx_v_len, PyObject *__pyx_v_id, PyObject *__pyx_v_off, PyObject *__pyx_v_ttl, PyObject *__pyx_v_p, PyObject *__pyx_v_src, PyObject *__pyx_v_dst); /* proto */ +static PyObject *__pyx_pf_4dnet_20ip6_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_22ip6_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_24ip6_checksum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_26ip6_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fc, PyObject *__pyx_v_fl, PyObject *__pyx_v_plen, PyObject *__pyx_v_nxt, PyObject *__pyx_v_hlim, PyObject *__pyx_v_src, PyObject *__pyx_v_dst); /* proto */ +static int __pyx_pf_4dnet_4addr___init__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_addrtxt, CYTHON_UNUSED PyObject *__pyx_v_addrtype); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_8addrtype___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static int __pyx_pf_4dnet_4addr_8addrtype_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, unsigned int __pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_4bits___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static int __pyx_pf_4dnet_4addr_4bits_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, unsigned int __pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_4data___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_3eth___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static int __pyx_pf_4dnet_4addr_3eth_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_2ip___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static int __pyx_pf_4dnet_4addr_2ip_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_3ip6___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static int __pyx_pf_4dnet_4addr_3ip6_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_2bcast(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_4net(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_6__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_8__copy__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_10__eq__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_12__ne__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_14__lt__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_16__gt__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_18__le__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_20__ge__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y); /* proto */ +static int __pyx_pf_4dnet_4addr_22__contains__(struct __pyx_obj_4dnet_addr *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_other); /* proto */ +static Py_hash_t __pyx_pf_4dnet_4addr_24__hash__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_26__int__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +#if PY_MAJOR_VERSION < 3 +static PyObject *__pyx_pf_4dnet_4addr_28__long__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +#endif +static PyObject *__pyx_pf_4dnet_4addr_30__iter__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_32__repr__(struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_34__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_addr *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4addr_36__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_addr *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_15__addr_ip4_iter___init__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self, PyObject *__pyx_v_cur, PyObject *__pyx_v_max); /* proto */ +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_2__next__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_4__reduce_cython__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_6__setstate_cython__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_3arp___init__(struct __pyx_obj_4dnet_arp *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_2add(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa, struct __pyx_obj_4dnet_addr *__pyx_v_ha); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_4delete(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_6get(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_8loop(struct __pyx_obj_4dnet_arp *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_10__iter__(struct __pyx_obj_4dnet_arp *__pyx_v_self); /* proto */ +static void __pyx_pf_4dnet_3arp_12__dealloc__(struct __pyx_obj_4dnet_arp *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_arp *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3arp_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_arp *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_4dnet_28arp_pack_hdr_ethip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_op, PyObject *__pyx_v_sha, PyObject *__pyx_v_spa, PyObject *__pyx_v_dha, PyObject *__pyx_v_dpa); /* proto */ +static PyObject *__pyx_pf_4dnet_30icmp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_itype, PyObject *__pyx_v_code); /* proto */ +static PyObject *__pyx_pf_4dnet_32tcp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sport, PyObject *__pyx_v_dport, PyObject *__pyx_v_seq, PyObject *__pyx_v_ack, PyObject *__pyx_v_flags, PyObject *__pyx_v_win, PyObject *__pyx_v_urp); /* proto */ +static PyObject *__pyx_pf_4dnet_34udp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sport, PyObject *__pyx_v_dport, PyObject *__pyx_v_ulen); /* proto */ +static int __pyx_pf_4dnet_4intf___init__(struct __pyx_obj_4dnet_intf *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_2get(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_name); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_4get_src(struct __pyx_obj_4dnet_intf *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_src); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_6get_dst(struct __pyx_obj_4dnet_intf *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_8set(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_d); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_10loop(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_12__iter__(struct __pyx_obj_4dnet_intf *__pyx_v_self); /* proto */ +static void __pyx_pf_4dnet_4intf_14__dealloc__(struct __pyx_obj_4dnet_intf *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_intf *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4intf_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_intf *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_5route___init__(struct __pyx_obj_4dnet_route *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_2add(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst, struct __pyx_obj_4dnet_addr *__pyx_v_gw); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_4delete(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_6get(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_8loop(struct __pyx_obj_4dnet_route *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_10__iter__(struct __pyx_obj_4dnet_route *__pyx_v_self); /* proto */ +static void __pyx_pf_4dnet_5route_12__dealloc__(struct __pyx_obj_4dnet_route *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_route *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_5route_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_route *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_2fw___init__(struct __pyx_obj_4dnet_fw *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_2add(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_d); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_4delete(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_d); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_6loop(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_8__iter__(struct __pyx_obj_4dnet_fw *__pyx_v_self); /* proto */ +static void __pyx_pf_4dnet_2fw_10__dealloc__(struct __pyx_obj_4dnet_fw *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_fw *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_2fw_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_fw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_4rand___init__(struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_2get(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_len); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_4set(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_6add(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_8uint8(struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_10uint16(struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_12uint32(struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_14xrange(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop); /* proto */ +static void __pyx_pf_4dnet_4rand_16__dealloc__(struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_18__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_rand *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_4rand_20__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_rand *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_13__rand_xrange___init__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self, PyObject *__pyx_v_r, PyObject *__pyx_v_start, PyObject *__pyx_v_stop); /* proto */ +static PyObject *__pyx_pf_4dnet_13__rand_xrange_2__iter__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self); /* proto */ +static Py_ssize_t __pyx_pf_4dnet_13__rand_xrange_4__len__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_13__rand_xrange_6__next__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_13__rand_xrange_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_13__rand_xrange_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_4dnet_3tun___init__(struct __pyx_obj_4dnet_tun *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_src, struct __pyx_obj_4dnet_addr *__pyx_v_dst, PyObject *__pyx_v_mtu); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_4name___get__(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_2fd___get__(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_2fileno(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_4send(struct __pyx_obj_4dnet_tun *__pyx_v_self, PyObject *__pyx_v_pkt); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_6recv(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_8close(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static void __pyx_pf_4dnet_3tun_10__dealloc__(struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_tun *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_4dnet_3tun_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_tun *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_pf_4dnet_36__pyx_unpickle___addr_ip4_iter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_4dnet_eth(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_ip(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_addr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet___addr_ip4_iter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_arp(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_intf(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_route(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_fw(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_rand(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet___rand_xrange(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_tp_new_4dnet_tun(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_3; +static PyObject *__pyx_int_4; +static PyObject *__pyx_int_5; +static PyObject *__pyx_int_6; +static PyObject *__pyx_int_7; +static PyObject *__pyx_int_8; +static PyObject *__pyx_int_9; +static PyObject *__pyx_int_10; +static PyObject *__pyx_int_11; +static PyObject *__pyx_int_12; +static PyObject *__pyx_int_13; +static PyObject *__pyx_int_14; +static PyObject *__pyx_int_15; +static PyObject *__pyx_int_16; +static PyObject *__pyx_int_17; +static PyObject *__pyx_int_18; +static PyObject *__pyx_int_19; +static PyObject *__pyx_int_20; +static PyObject *__pyx_int_21; +static PyObject *__pyx_int_22; +static PyObject *__pyx_int_23; +static PyObject *__pyx_int_24; +static PyObject *__pyx_int_26; +static PyObject *__pyx_int_27; +static PyObject *__pyx_int_32; +static PyObject *__pyx_int_40; +static PyObject *__pyx_int_41; +static PyObject *__pyx_int_47; +static PyObject *__pyx_int_48; +static PyObject *__pyx_int_50; +static PyObject *__pyx_int_51; +static PyObject *__pyx_int_53; +static PyObject *__pyx_int_58; +static PyObject *__pyx_int_64; +static PyObject *__pyx_int_128; +static PyObject *__pyx_int_255; +static PyObject *__pyx_int_512; +static PyObject *__pyx_int_1024; +static PyObject *__pyx_int_1280; +static PyObject *__pyx_int_1500; +static PyObject *__pyx_int_1518; +static PyObject *__pyx_int_2048; +static PyObject *__pyx_int_2054; +static PyObject *__pyx_int_8191; +static PyObject *__pyx_int_8192; +static PyObject *__pyx_int_16384; +static PyObject *__pyx_int_32768; +static PyObject *__pyx_int_32821; +static PyObject *__pyx_int_33024; +static PyObject *__pyx_int_34525; +static PyObject *__pyx_int_34887; +static PyObject *__pyx_int_34888; +static PyObject *__pyx_int_34915; +static PyObject *__pyx_int_34916; +static PyObject *__pyx_int_36864; +static PyObject *__pyx_int_65535; +static PyObject *__pyx_int_218787872; +static PyObject *__pyx_k__3; +static PyObject *__pyx_k__4; +static PyObject *__pyx_k__5; +static PyObject *__pyx_k__8; +static PyObject *__pyx_k__9; +static PyObject *__pyx_k__10; +static PyObject *__pyx_k__11; +static PyObject *__pyx_k__12; +static PyObject *__pyx_k__13; +static PyObject *__pyx_k__14; +static PyObject *__pyx_k__15; +static PyObject *__pyx_k__16; +static PyObject *__pyx_k__17; +static PyObject *__pyx_k__18; +static PyObject *__pyx_k__23; +static PyObject *__pyx_k__24; +static PyObject *__pyx_k__25; +static PyObject *__pyx_k__26; +static PyObject *__pyx_k__27; +static PyObject *__pyx_k__28; +static PyObject *__pyx_k__29; +static PyObject *__pyx_k__30; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__20; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__22; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__32; +static PyObject *__pyx_tuple__33; +static PyObject *__pyx_tuple__34; +static PyObject *__pyx_tuple__35; +static PyObject *__pyx_tuple__36; +static PyObject *__pyx_tuple__37; +static PyObject *__pyx_tuple__38; +static PyObject *__pyx_tuple__39; +static PyObject *__pyx_tuple__40; +static PyObject *__pyx_tuple__41; +static PyObject *__pyx_tuple__42; +static PyObject *__pyx_tuple__43; +static PyObject *__pyx_tuple__45; +static PyObject *__pyx_tuple__47; +static PyObject *__pyx_tuple__49; +static PyObject *__pyx_tuple__51; +static PyObject *__pyx_tuple__53; +static PyObject *__pyx_tuple__55; +static PyObject *__pyx_tuple__57; +static PyObject *__pyx_tuple__59; +static PyObject *__pyx_tuple__61; +static PyObject *__pyx_tuple__63; +static PyObject *__pyx_tuple__65; +static PyObject *__pyx_tuple__67; +static PyObject *__pyx_tuple__69; +static PyObject *__pyx_tuple__71; +static PyObject *__pyx_tuple__73; +static PyObject *__pyx_tuple__75; +static PyObject *__pyx_tuple__77; +static PyObject *__pyx_tuple__79; +static PyObject *__pyx_codeobj__44; +static PyObject *__pyx_codeobj__46; +static PyObject *__pyx_codeobj__48; +static PyObject *__pyx_codeobj__50; +static PyObject *__pyx_codeobj__52; +static PyObject *__pyx_codeobj__54; +static PyObject *__pyx_codeobj__56; +static PyObject *__pyx_codeobj__58; +static PyObject *__pyx_codeobj__60; +static PyObject *__pyx_codeobj__62; +static PyObject *__pyx_codeobj__64; +static PyObject *__pyx_codeobj__66; +static PyObject *__pyx_codeobj__68; +static PyObject *__pyx_codeobj__70; +static PyObject *__pyx_codeobj__72; +static PyObject *__pyx_codeobj__74; +static PyObject *__pyx_codeobj__76; +static PyObject *__pyx_codeobj__78; +static PyObject *__pyx_codeobj__80; +/* Late includes */ + +/* "dnet.pyx":46 + * int strlcpy(char *dst, char *src, int size) + * + * cdef __memcpy(char *dst, object src, int n): # <<<<<<<<<<<<<< + * if PyBytes_Size(src) != n: + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) + */ + +static PyObject *__pyx_f_4dnet___memcpy(char *__pyx_v_dst, PyObject *__pyx_v_src, int __pyx_v_n) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + Py_UCS4 __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + char *__pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__memcpy", 0); + + /* "dnet.pyx":47 + * + * cdef __memcpy(char *dst, object src, int n): + * if PyBytes_Size(src) != n: # <<<<<<<<<<<<<< + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) + * memcpy(dst, src, n) + */ + __pyx_t_1 = ((PyBytes_Size(__pyx_v_src) != __pyx_v_n) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":48 + * cdef __memcpy(char *dst, object src, int n): + * if PyBytes_Size(src) != n: + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) # <<<<<<<<<<<<<< + * memcpy(dst, src, n) + * + */ + __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_4 = 127; + __Pyx_INCREF(__pyx_kp_u_not_a); + __pyx_t_3 += 6; + __Pyx_GIVEREF(__pyx_kp_u_not_a); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_not_a); + __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_v_n, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5); + __pyx_t_5 = 0; + __Pyx_INCREF(__pyx_kp_u_byte_binary_string); + __pyx_t_3 += 21; + __Pyx_GIVEREF(__pyx_kp_u_byte_binary_string); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_byte_binary_string); + __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_src), __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4; + __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 4, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 48, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_5, 0, 0); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __PYX_ERR(0, 48, __pyx_L1_error) + + /* "dnet.pyx":47 + * + * cdef __memcpy(char *dst, object src, int n): + * if PyBytes_Size(src) != n: # <<<<<<<<<<<<<< + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) + * memcpy(dst, src, n) + */ + } + + /* "dnet.pyx":49 + * if PyBytes_Size(src) != n: + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) + * memcpy(dst, src, n) # <<<<<<<<<<<<<< + * + * cdef __oserror(): + */ + __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_src); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 49, __pyx_L1_error) + (void)(memcpy(__pyx_v_dst, __pyx_t_6, __pyx_v_n)); + + /* "dnet.pyx":46 + * int strlcpy(char *dst, char *src, int size) + * + * cdef __memcpy(char *dst, object src, int n): # <<<<<<<<<<<<<< + * if PyBytes_Size(src) != n: + * raise ValueError, "not a %d-byte binary string: %r" % (n, src) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.__memcpy"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dnet.__memcpy", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - Py_DECREF(__pyx_v_src); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } +/* "dnet.pyx":51 + * memcpy(dst, src, n) + * + * cdef __oserror(): # <<<<<<<<<<<<<< + * cdef extern int errno = 0 + * return strerror(errno) + */ + static PyObject *__pyx_f_4dnet___oserror(void) { - __PYX_EXTERN_C int errno; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":50 */ - __pyx_1 = PyBytes_FromString(strerror(errno)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + int errno; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__oserror", 0); + + /* "dnet.pyx":52 + * + * cdef __oserror(): + * cdef extern int errno = 0 # <<<<<<<<<<<<<< + * return strerror(errno) + * + */ + errno = 0; + + /* "dnet.pyx":53 + * cdef __oserror(): + * cdef extern int errno = 0 + * return strerror(errno) # <<<<<<<<<<<<<< + * + * def __iter_append(entry, l): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyStr_FromString(strerror(errno)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.__oserror"); + /* "dnet.pyx":51 + * memcpy(dst, src, n) + * + * cdef __oserror(): # <<<<<<<<<<<<<< + * cdef extern int errno = 0 + * return strerror(errno) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.__oserror", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_append; - -static PyObject *__pyx_f_4dnet___iter_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_4dnet___iter_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":55 + * return strerror(errno) + * + * def __iter_append(entry, l): # <<<<<<<<<<<<<< + * l.append(entry) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_1__iter_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_4dnet_1__iter_append = {"__iter_append", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_1__iter_append, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_4dnet_1__iter_append(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_entry = 0; PyObject *__pyx_v_l = 0; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"entry","l",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_entry, &__pyx_v_l)) return 0; - Py_INCREF(__pyx_v_entry); - Py_INCREF(__pyx_v_l); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":53 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_l, __pyx_n_append); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} - Py_INCREF(__pyx_v_entry); - PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_entry); - __pyx_3 = PyObject_Call(__pyx_1, __pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - - __pyx_r = Py_None; Py_INCREF(Py_None); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter_append (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_entry,&__pyx_n_s_l,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_entry)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_l)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__iter_append", 1, 2, 2, 1); __PYX_ERR(0, 55, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__iter_append") < 0)) __PYX_ERR(0, 55, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_entry = values[0]; + __pyx_v_l = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__iter_append", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 55, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.__iter_append", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet___iter_append(__pyx_self, __pyx_v_entry, __pyx_v_l); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet___iter_append(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_entry, PyObject *__pyx_v_l) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter_append", 0); + + /* "dnet.pyx":56 + * + * def __iter_append(entry, l): + * l.append(entry) # <<<<<<<<<<<<<< + * + * # + */ + __pyx_t_1 = __Pyx_PyObject_Append(__pyx_v_l, __pyx_v_entry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 56, __pyx_L1_error) + + /* "dnet.pyx":55 + * return strerror(errno) + * + * def __iter_append(entry, l): # <<<<<<<<<<<<<< + * l.append(entry) + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__iter_append"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.__iter_append", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_entry); - Py_DECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_OSError; - -static int __pyx_f_4dnet_3eth___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_3eth___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":112 + * cdef eth_t *eth + * + * def __init__(self, device): # <<<<<<<<<<<<<< + * self.eth = eth_open(device) + * if not self.eth: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_3eth_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_3eth_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_device = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; int __pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - static char *__pyx_argnames[] = {"device",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_device)) return -1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_device); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":110 */ - __pyx_1 = PyBytes_AsString(__pyx_v_device); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; goto __pyx_L1;} - ((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth = eth_open(__pyx_1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":111 */ - __pyx_2 = (!(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth != 0)); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":112 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;} - __pyx_4 = __pyx_f_4dnet___oserror(); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_4, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_device,0}; + PyObject* values[1] = {0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_device)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 112, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + } + __pyx_v_device = values[0]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 112, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.eth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_3eth___init__(((struct __pyx_obj_4dnet_eth *)__pyx_v_self), __pyx_v_device); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_4dnet_3eth___init__(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_device) { + int __pyx_r; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":113 + * + * def __init__(self, device): + * self.eth = eth_open(device) # <<<<<<<<<<<<<< + * if not self.eth: + * raise OSError, __oserror() + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_device); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 113, __pyx_L1_error) + __pyx_v_self->eth = eth_open(__pyx_t_1); + + /* "dnet.pyx":114 + * def __init__(self, device): + * self.eth = eth_open(device) + * if not self.eth: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((!(__pyx_v_self->eth != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":115 + * self.eth = eth_open(device) + * if not self.eth: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def get(self): + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 115, __pyx_L1_error) + + /* "dnet.pyx":114 + * def __init__(self, device): + * self.eth = eth_open(device) + * if not self.eth: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + + /* "dnet.pyx":112 + * cdef eth_t *eth + * + * def __init__(self, device): # <<<<<<<<<<<<<< + * self.eth = eth_open(device) + * if not self.eth: + */ + + /* function exit code */ + __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.eth.__init__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.eth.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_device); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":117 + * raise OSError, __oserror() + * + * def get(self): # <<<<<<<<<<<<<< + * """Return the MAC address associated with the device as a + * binary string.""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_3get(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_3eth_2get[] = "Return the MAC address associated with the device as a\n binary string."; +static PyObject *__pyx_pw_4dnet_3eth_3get(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3eth_2get(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3eth_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3eth_get[] = "Return the MAC address associated with the device as a\n binary string."; -static PyObject *__pyx_f_4dnet_3eth_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pf_4dnet_3eth_2get(struct __pyx_obj_4dnet_eth *__pyx_v_self) { eth_addr_t __pyx_v_ea; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":118 */ - __pyx_1 = (eth_get(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth,(&__pyx_v_ea)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":119 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":120 */ - __pyx_2 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get", 0); + + /* "dnet.pyx":121 + * binary string.""" + * cdef eth_addr_t ea + * if eth_get(self.eth, &ea) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(ea.data, 6) + */ + __pyx_t_1 = ((eth_get(__pyx_v_self->eth, (&__pyx_v_ea)) < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":122 + * cdef eth_addr_t ea + * if eth_get(self.eth, &ea) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(ea.data, 6) + * + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 122, __pyx_L1_error) + + /* "dnet.pyx":121 + * binary string.""" + * cdef eth_addr_t ea + * if eth_get(self.eth, &ea) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(ea.data, 6) + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":123 + * if eth_get(self.eth, &ea) < 0: + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(ea.data, 6) # <<<<<<<<<<<<<< + * + * def set(self, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_ea.data, 6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.eth.get"); - __pyx_r = 0; + + /* "dnet.pyx":117 + * raise OSError, __oserror() + * + * def get(self): # <<<<<<<<<<<<<< + * """Return the MAC address associated with the device as a + * binary string.""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.eth.get", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":125 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def set(self, value): # <<<<<<<<<<<<<< + * """Set the MAC address for the device, returning 0 on success, + * -1 on failure. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_5set(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static char __pyx_doc_4dnet_3eth_4set[] = "Set the MAC address for the device, returning 0 on success,\n -1 on failure.\n \n Arguments:\n eth_addr -- 6-byte binary string (e.g. '\\x00\\xde\\xad\\xbe\\xef\\x00')\n "; +static PyObject *__pyx_pw_4dnet_3eth_5set(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3eth_4set(((struct __pyx_obj_4dnet_eth *)__pyx_v_self), ((PyObject *)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3eth_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3eth_set[] = "Set the MAC address for the device, returning 0 on success,\n -1 on failure.\n \n Arguments:\n eth_addr -- 6-byte binary string (e.g. \'\\x00\\xde\\xad\\xbe\\xef\\x00\')\n "; -static PyObject *__pyx_f_4dnet_3eth_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_value = 0; +static PyObject *__pyx_pf_4dnet_3eth_4set(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_value) { eth_addr_t __pyx_v_ea; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"value",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_value)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_value); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":130 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_value,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":131 */ - __pyx_2 = (eth_set(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth,(&__pyx_v_ea)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":132 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_3, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("set", 0); + + /* "dnet.pyx":133 + * """ + * cdef eth_addr_t ea + * __memcpy(ea.data, value, 6) # <<<<<<<<<<<<<< + * if eth_set(self.eth, &ea) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data, __pyx_v_value, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":134 + * cdef eth_addr_t ea + * __memcpy(ea.data, value, 6) + * if eth_set(self.eth, &ea) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((eth_set(__pyx_v_self->eth, (&__pyx_v_ea)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":135 + * __memcpy(ea.data, value, 6) + * if eth_set(self.eth, &ea) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def send(self, frame): + */ + __pyx_t_1 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 135, __pyx_L1_error) + + /* "dnet.pyx":134 + * cdef eth_addr_t ea + * __memcpy(ea.data, value, 6) + * if eth_set(self.eth, &ea) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + + /* "dnet.pyx":125 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def set(self, value): # <<<<<<<<<<<<<< + * """Set the MAC address for the device, returning 0 on success, + * -1 on failure. + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.eth.set"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.eth.set", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_value); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_3eth_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3eth_send[] = "Send an Ethernet frame, returning the number of bytes sent\n or -1 on failure.\n \n Arguments:\n frame -- binary string representing an Ethernet frame\n "; -static PyObject *__pyx_f_4dnet_3eth_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_frame = 0; - PyObject *__pyx_r; - char (*__pyx_1); - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {"frame",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_frame)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_frame); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":141 */ - __pyx_1 = PyBytes_AsString(__pyx_v_frame); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; goto __pyx_L1;} - __pyx_2 = PyLong_FromLong(eth_send(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth,__pyx_1,PyBytes_Size(__pyx_v_frame))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":137 + * raise OSError, __oserror() + * + * def send(self, frame): # <<<<<<<<<<<<<< + * """Send an Ethernet frame, returning the number of bytes sent + * or -1 on failure. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_7send(PyObject *__pyx_v_self, PyObject *__pyx_v_frame); /*proto*/ +static char __pyx_doc_4dnet_3eth_6send[] = "Send an Ethernet frame, returning the number of bytes sent\n or -1 on failure.\n \n Arguments:\n frame -- binary string representing an Ethernet frame\n "; +static PyObject *__pyx_pw_4dnet_3eth_7send(PyObject *__pyx_v_self, PyObject *__pyx_v_frame) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("send (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3eth_6send(((struct __pyx_obj_4dnet_eth *)__pyx_v_self), ((PyObject *)__pyx_v_frame)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_3eth_6send(struct __pyx_obj_4dnet_eth *__pyx_v_self, PyObject *__pyx_v_frame) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("send", 0); + + /* "dnet.pyx":144 + * frame -- binary string representing an Ethernet frame + * """ + * return eth_send(self.eth, frame, PyBytes_Size(frame)) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_frame); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 144, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_int(eth_send(__pyx_v_self->eth, __pyx_t_1, PyBytes_Size(__pyx_v_frame))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.eth.send"); - __pyx_r = 0; + + /* "dnet.pyx":137 + * raise OSError, __oserror() + * + * def send(self, frame): # <<<<<<<<<<<<<< + * """Send an Ethernet frame, returning the number of bytes sent + * or -1 on failure. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.eth.send", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_frame); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_3eth___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_3eth___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":144 */ - __pyx_1 = (((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth != 0); - if (__pyx_1) { +/* "dnet.pyx":146 + * return eth_send(self.eth, frame, PyBytes_Size(frame)) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.eth: + * eth_close(self.eth) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_3eth_9__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_3eth_9__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_3eth_8__dealloc__(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":145 */ - eth_close(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)->eth); - goto __pyx_L2; +static void __pyx_pf_4dnet_3eth_8__dealloc__(struct __pyx_obj_4dnet_eth *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":147 + * + * def __dealloc__(self): + * if self.eth: # <<<<<<<<<<<<<< + * eth_close(self.eth) + * + */ + __pyx_t_1 = (__pyx_v_self->eth != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":148 + * def __dealloc__(self): + * if self.eth: + * eth_close(self.eth) # <<<<<<<<<<<<<< + * + * def eth_ntoa(buf): + */ + (void)(eth_close(__pyx_v_self->eth)); + + /* "dnet.pyx":147 + * + * def __dealloc__(self): + * if self.eth: # <<<<<<<<<<<<<< + * eth_close(self.eth) + * + */ } - __pyx_L2:; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.eth.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); + /* "dnet.pyx":146 + * return eth_send(self.eth, frame, PyBytes_Size(frame)) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.eth: + * eth_close(self.eth) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); } -static PyObject *__pyx_f_4dnet_eth_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_eth_ntoa[] = "Convert an Ethernet MAC address from 6-byte packed binary string to\n a printable string (\'00:de:ad:be:ef:00\')."; -static PyObject *__pyx_f_4dnet_eth_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_3eth_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3eth_10__reduce_cython__(((struct __pyx_obj_4dnet_eth *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3eth_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_eth *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.eth.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_3eth_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3eth_12__setstate_cython__(((struct __pyx_obj_4dnet_eth *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3eth_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_eth *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.eth.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":150 + * eth_close(self.eth) + * + * def eth_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from 6-byte packed binary string to + * a printable string ('00:de:ad:be:ef:00').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3eth_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_2eth_ntoa[] = "Convert an Ethernet MAC address from 6-byte packed binary string to\n a printable string ('00:de:ad:be:ef:00')."; +static PyMethodDef __pyx_mdef_4dnet_3eth_ntoa = {"eth_ntoa", (PyCFunction)__pyx_pw_4dnet_3eth_ntoa, METH_O, __pyx_doc_4dnet_2eth_ntoa}; +static PyObject *__pyx_pw_4dnet_3eth_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("eth_ntoa (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2eth_ntoa(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_2eth_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { eth_addr_t __pyx_v_ea; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":151 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data,__pyx_v_buf,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":152 */ - __pyx_1 = PyBytes_FromString(eth_ntoa((&__pyx_v_ea))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("eth_ntoa", 0); + + /* "dnet.pyx":154 + * a printable string ('00:de:ad:be:ef:00').""" + * cdef eth_addr_t ea + * __memcpy(ea.data, buf, 6) # <<<<<<<<<<<<<< + * return __eth_ntoa(&ea) + * + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_ea.data, __pyx_v_buf, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":155 + * cdef eth_addr_t ea + * __memcpy(ea.data, buf, 6) + * return __eth_ntoa(&ea) # <<<<<<<<<<<<<< + * + * def eth_aton(buf): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyStr_FromString(eth_ntoa((&__pyx_v_ea))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.eth_ntoa"); - __pyx_r = 0; + /* "dnet.pyx":150 + * eth_close(self.eth) + * + * def eth_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from 6-byte packed binary string to + * a printable string ('00:de:ad:be:ef:00').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.eth_ntoa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k61p; - -static char (__pyx_k61[]) = "invalid Ethernet address"; +/* "dnet.pyx":157 + * return __eth_ntoa(&ea) + * + * def eth_aton(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from a printable string to a + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5eth_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_4eth_aton[] = "Convert an Ethernet MAC address from a printable string to a\n packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00')."; +static PyMethodDef __pyx_mdef_4dnet_5eth_aton = {"eth_aton", (PyCFunction)__pyx_pw_4dnet_5eth_aton, METH_O, __pyx_doc_4dnet_4eth_aton}; +static PyObject *__pyx_pw_4dnet_5eth_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("eth_aton (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4eth_aton(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_f_4dnet_eth_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_eth_aton[] = "Convert an Ethernet MAC address from a printable string to a\n packed binary string (\'\\x00\\xde\\xad\\xbe\\xef\\x00\')."; -static PyObject *__pyx_f_4dnet_eth_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; +static PyObject *__pyx_pf_4dnet_4eth_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { eth_addr_t __pyx_v_ea; - PyObject *__pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":158 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; goto __pyx_L1;} - __pyx_2 = (eth_aton(__pyx_1,(&__pyx_v_ea)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":159 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_k61p, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":160 */ - __pyx_3 = PyBytes_FromStringAndSize(__pyx_v_ea.data,6); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 160; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("eth_aton", 0); + + /* "dnet.pyx":161 + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + * cdef eth_addr_t ea + * if __eth_aton(buf, &ea) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid Ethernet address" + * return PyBytes_FromStringAndSize(ea.data, 6) + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_2 = ((eth_aton(__pyx_t_1, (&__pyx_v_ea)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":162 + * cdef eth_addr_t ea + * if __eth_aton(buf, &ea) < 0: + * raise ValueError, "invalid Ethernet address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(ea.data, 6) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_invalid_Ethernet_address, 0, 0); + __PYX_ERR(0, 162, __pyx_L1_error) + + /* "dnet.pyx":161 + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + * cdef eth_addr_t ea + * if __eth_aton(buf, &ea) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid Ethernet address" + * return PyBytes_FromStringAndSize(ea.data, 6) + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":163 + * if __eth_aton(buf, &ea) < 0: + * raise ValueError, "invalid Ethernet address" + * return PyBytes_FromStringAndSize(ea.data, 6) # <<<<<<<<<<<<<< + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(__pyx_v_ea.data, 6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.eth_aton"); - __pyx_r = 0; + + /* "dnet.pyx":157 + * return __eth_ntoa(&ea) + * + * def eth_aton(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from a printable string to a + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.eth_aton", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_eth_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_eth_pack_hdr[] = "Return a packed binary string representing an Ethernet header.\n \n Keyword arguments:\n dst -- destination address (6-byte binary string)\n src -- source address (6-byte binary string)\n type -- Ethernet payload type (ETH_TYPE_*) (16-bit integer)\n "; -static PyObject *__pyx_f_4dnet_eth_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":165 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, # <<<<<<<<<<<<<< + * etype=ETH_TYPE_IP): + * """Return a packed binary string representing an Ethernet header. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_7eth_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_6eth_pack_hdr[] = "Return a packed binary string representing an Ethernet header.\n\t\n Keyword arguments:\n dst -- destination address\t\t\t(6-byte binary string)\n src -- source address\t\t\t(6-byte binary string)\n etype -- Ethernet payload type (ETH_TYPE_*)\t(16-bit integer)\n "; +static PyMethodDef __pyx_mdef_4dnet_7eth_pack_hdr = {"eth_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_7eth_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_6eth_pack_hdr}; +static PyObject *__pyx_pw_4dnet_7eth_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_dst = 0; PyObject *__pyx_v_src = 0; - PyObject *__pyx_v_type = 0; - char (__pyx_v_hdr[14]); + PyObject *__pyx_v_etype = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("eth_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dst,&__pyx_n_s_src,&__pyx_n_s_etype,0}; + PyObject* values[3] = {0,0,0}; + values[0] = __pyx_k__3; + values[1] = __pyx_k__4; + values[2] = __pyx_k__5; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dst); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_etype); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "eth_pack_hdr") < 0)) __PYX_ERR(0, 165, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_dst = values[0]; + __pyx_v_src = values[1]; + __pyx_v_etype = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("eth_pack_hdr", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 165, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.eth_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_6eth_pack_hdr(__pyx_self, __pyx_v_dst, __pyx_v_src, __pyx_v_etype); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_6eth_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src, PyObject *__pyx_v_etype) { + char __pyx_v_hdr[14]; eth_addr_t __pyx_v_s; eth_addr_t __pyx_v_d; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - static char *__pyx_argnames[] = {"dst","src","type",0}; - __pyx_v_dst = __pyx_k16; - __pyx_v_src = __pyx_k17; - __pyx_v_type = __pyx_k18; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOO", __pyx_argnames, &__pyx_v_dst, &__pyx_v_src, &__pyx_v_type)) return 0; - Py_INCREF(__pyx_v_dst); - Py_INCREF(__pyx_v_src); - Py_INCREF(__pyx_v_type); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":173 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_s.data,__pyx_v_src,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":174 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_d.data,__pyx_v_dst,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":175 */ - __pyx_2 = PyLong_AsLong(__pyx_v_type); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; goto __pyx_L1;} - eth_pack_hdr(__pyx_v_hdr,__pyx_v_d,__pyx_v_s,__pyx_2); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":176 */ - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_hdr,14); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("eth_pack_hdr", 0); + + /* "dnet.pyx":176 + * cdef char hdr[14] + * cdef eth_addr_t s, d + * __memcpy(s.data, src, 6) # <<<<<<<<<<<<<< + * __memcpy(d.data, dst, 6) + * __eth_pack_hdr(hdr, d, s, etype) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_s.data, __pyx_v_src, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":177 + * cdef eth_addr_t s, d + * __memcpy(s.data, src, 6) + * __memcpy(d.data, dst, 6) # <<<<<<<<<<<<<< + * __eth_pack_hdr(hdr, d, s, etype) + * return PyBytes_FromStringAndSize(hdr, 14) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_d.data, __pyx_v_dst, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":178 + * __memcpy(s.data, src, 6) + * __memcpy(d.data, dst, 6) + * __eth_pack_hdr(hdr, d, s, etype) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(hdr, 14) + * + */ + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_etype); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 178, __pyx_L1_error) + eth_pack_hdr(__pyx_v_hdr, __pyx_v_d, __pyx_v_s, __pyx_t_2); + + /* "dnet.pyx":179 + * __memcpy(d.data, dst, 6) + * __eth_pack_hdr(hdr, d, s, etype) + * return PyBytes_FromStringAndSize(hdr, 14) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_hdr, 14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.eth_pack_hdr"); - __pyx_r = 0; + /* "dnet.pyx":165 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, # <<<<<<<<<<<<<< + * etype=ETH_TYPE_IP): + * """Return a packed binary string representing an Ethernet header. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.eth_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_dst); - Py_DECREF(__pyx_v_src); - Py_DECREF(__pyx_v_type); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":250 + * cdef ip_t *ip + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.ip = ip_open() + * if not self.ip: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_2ip_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_2ip_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_2ip___init__(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_2ip___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_2ip___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static int __pyx_pf_4dnet_2ip___init__(struct __pyx_obj_4dnet_ip *__pyx_v_self) { int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":248 */ - ((struct __pyx_obj_4dnet_ip *)__pyx_v_self)->ip = ip_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":249 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)->ip != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":250 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":251 + * + * def __init__(self): + * self.ip = ip_open() # <<<<<<<<<<<<<< + * if not self.ip: + * raise OSError, __oserror() + */ + __pyx_v_self->ip = ip_open(); + + /* "dnet.pyx":252 + * def __init__(self): + * self.ip = ip_open() + * if not self.ip: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->ip != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":253 + * self.ip = ip_open() + * if not self.ip: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def send(self, pkt): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 253, __pyx_L1_error) + + /* "dnet.pyx":252 + * def __init__(self): + * self.ip = ip_open() + * if not self.ip: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + /* "dnet.pyx":250 + * cdef ip_t *ip + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.ip = ip_open() + * if not self.ip: + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.ip.__init__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.ip.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_2ip_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_2ip_send[] = "Send an IP packet, returning the number of bytes sent\n or -1 on failure.\n\n Arguments:\n pkt -- binary string representing an IP packet\n "; -static PyObject *__pyx_f_4dnet_2ip_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_pkt = 0; - PyObject *__pyx_r; - char (*__pyx_1); - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {"pkt",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_pkt)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_pkt); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":259 */ - __pyx_1 = PyBytes_AsString(__pyx_v_pkt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;} - __pyx_2 = PyLong_FromLong(ip_send(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)->ip,__pyx_1,PyBytes_Size(__pyx_v_pkt))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":255 + * raise OSError, __oserror() + * + * def send(self, pkt): # <<<<<<<<<<<<<< + * """Send an IP packet, returning the number of bytes sent + * or -1 on failure. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2ip_3send(PyObject *__pyx_v_self, PyObject *__pyx_v_pkt); /*proto*/ +static char __pyx_doc_4dnet_2ip_2send[] = "Send an IP packet, returning the number of bytes sent\n or -1 on failure.\n\n Arguments:\n pkt -- binary string representing an IP packet\n "; +static PyObject *__pyx_pw_4dnet_2ip_3send(PyObject *__pyx_v_self, PyObject *__pyx_v_pkt) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("send (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2ip_2send(((struct __pyx_obj_4dnet_ip *)__pyx_v_self), ((PyObject *)__pyx_v_pkt)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_2ip_2send(struct __pyx_obj_4dnet_ip *__pyx_v_self, PyObject *__pyx_v_pkt) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("send", 0); + + /* "dnet.pyx":262 + * pkt -- binary string representing an IP packet + * """ + * return ip_send(self.ip, pkt, PyBytes_Size(pkt)) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_pkt); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 262, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_int(ip_send(__pyx_v_self->ip, __pyx_t_1, PyBytes_Size(__pyx_v_pkt))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.ip.send"); - __pyx_r = 0; + + /* "dnet.pyx":255 + * raise OSError, __oserror() + * + * def send(self, pkt): # <<<<<<<<<<<<<< + * """Send an IP packet, returning the number of bytes sent + * or -1 on failure. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.ip.send", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_pkt); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_2ip___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_2ip___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":262 */ - __pyx_1 = (((struct __pyx_obj_4dnet_ip *)__pyx_v_self)->ip != 0); - if (__pyx_1) { +/* "dnet.pyx":264 + * return ip_send(self.ip, pkt, PyBytes_Size(pkt)) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.ip: + * ip_close(self.ip) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_2ip_5__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_2ip_5__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_2ip_4__dealloc__(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":263 */ - ip_close(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)->ip); - goto __pyx_L2; +static void __pyx_pf_4dnet_2ip_4__dealloc__(struct __pyx_obj_4dnet_ip *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":265 + * + * def __dealloc__(self): + * if self.ip: # <<<<<<<<<<<<<< + * ip_close(self.ip) + * + */ + __pyx_t_1 = (__pyx_v_self->ip != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":266 + * def __dealloc__(self): + * if self.ip: + * ip_close(self.ip) # <<<<<<<<<<<<<< + * + * def ip_ntoa(buf): + */ + (void)(ip_close(__pyx_v_self->ip)); + + /* "dnet.pyx":265 + * + * def __dealloc__(self): + * if self.ip: # <<<<<<<<<<<<<< + * ip_close(self.ip) + * + */ } - __pyx_L2:; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.ip.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); + /* "dnet.pyx":264 + * return ip_send(self.ip, pkt, PyBytes_Size(pkt)) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.ip: + * ip_close(self.ip) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); } -static PyObject *__pyx_f_4dnet_ip_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip_ntoa[] = "Convert an IP address from a 4-byte packed binary string or\n integer to a printable string (\'10.0.0.1\')."; -static PyObject *__pyx_f_4dnet_ip_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; - ip_addr_t __pyx_v_ia; - unsigned int __pyx_v_i; - PyObject *__pyx_r; - int __pyx_1; - unsigned long __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2ip_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_2ip_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2ip_6__reduce_cython__(((struct __pyx_obj_4dnet_ip *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":271 */ - __pyx_1 = PyLong_Check(__pyx_v_buf); - if (!__pyx_1) { - __pyx_1 = PyLong_Check(__pyx_v_buf); - } - if (__pyx_1) { +static PyObject *__pyx_pf_4dnet_2ip_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_ip *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2ip_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_2ip_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2ip_8__setstate_cython__(((struct __pyx_obj_4dnet_ip *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_2ip_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_ip *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":272 */ - __pyx_2 = PyLong_AsUnsignedLongMask(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; goto __pyx_L1;} - __pyx_v_i = ntohl(__pyx_2); +/* "dnet.pyx":268 + * ip_close(self.ip) + * + * def ip_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a 4-byte packed binary string or + * integer to a printable string ('10.0.0.1').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_9ip_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_8ip_ntoa[] = "Convert an IP address from a 4-byte packed binary string or\n integer to a printable string ('10.0.0.1')."; +static PyMethodDef __pyx_mdef_4dnet_9ip_ntoa = {"ip_ntoa", (PyCFunction)__pyx_pw_4dnet_9ip_ntoa, METH_O, __pyx_doc_4dnet_8ip_ntoa}; +static PyObject *__pyx_pw_4dnet_9ip_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_ntoa (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_8ip_ntoa(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":273 */ - memcpy(((char (*))(&__pyx_v_ia)),((char (*))(&__pyx_v_i)),4); - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_8ip_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { + ip_addr_t __pyx_v_ia; + unsigned int __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + unsigned long __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_ntoa", 0); + + /* "dnet.pyx":274 + * cdef unsigned int i + * + * if PyLong_Check(buf) or PyLong_Check(buf): # <<<<<<<<<<<<<< + * i = ntohl(buf) + * memcpy(&ia, &i, 4) + */ + __pyx_t_2 = (PyLong_Check(__pyx_v_buf) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_2 = (PyLong_Check(__pyx_v_buf) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "dnet.pyx":275 + * + * if PyLong_Check(buf) or PyLong_Check(buf): + * i = ntohl(buf) # <<<<<<<<<<<<<< + * memcpy(&ia, &i, 4) + * else: + */ + __pyx_t_3 = __Pyx_PyInt_As_unsigned_long(__pyx_v_buf); if (unlikely((__pyx_t_3 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 275, __pyx_L1_error) + __pyx_v_i = ntohl(__pyx_t_3); + + /* "dnet.pyx":276 + * if PyLong_Check(buf) or PyLong_Check(buf): + * i = ntohl(buf) + * memcpy(&ia, &i, 4) # <<<<<<<<<<<<<< + * else: + * __memcpy(&ia, buf, 4) + */ + (void)(memcpy(((char *)(&__pyx_v_ia)), ((char *)(&__pyx_v_i)), 4)); + + /* "dnet.pyx":274 + * cdef unsigned int i + * + * if PyLong_Check(buf) or PyLong_Check(buf): # <<<<<<<<<<<<<< + * i = ntohl(buf) + * memcpy(&ia, &i, 4) + */ + goto __pyx_L3; } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":275 */ - __pyx_3 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_ia)),__pyx_v_buf,4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; + /* "dnet.pyx":278 + * memcpy(&ia, &i, 4) + * else: + * __memcpy(&ia, buf, 4) # <<<<<<<<<<<<<< + * return __ip_ntoa(&ia) + * + */ + /*else*/ { + __pyx_t_4 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_ia)), __pyx_v_buf, 4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - __pyx_L2:; + __pyx_L3:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":276 */ - __pyx_3 = PyBytes_FromString(ip_ntoa((&__pyx_v_ia))); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; + /* "dnet.pyx":279 + * else: + * __memcpy(&ia, buf, 4) + * return __ip_ntoa(&ia) # <<<<<<<<<<<<<< + * + * def ip_aton(buf): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyStr_FromString(ip_ntoa((&__pyx_v_ia))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.ip_ntoa"); - __pyx_r = 0; + /* "dnet.pyx":268 + * ip_close(self.ip) + * + * def ip_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a 4-byte packed binary string or + * integer to a printable string ('10.0.0.1').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.ip_ntoa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k62p; - -static char (__pyx_k62[]) = "invalid IP address"; +/* "dnet.pyx":281 + * return __ip_ntoa(&ia) + * + * def ip_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_11ip_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_10ip_aton[] = "Convert an IP address from a printable string to a\n packed binary string ('\\x0a\\x00\\x00\\x01')."; +static PyMethodDef __pyx_mdef_4dnet_11ip_aton = {"ip_aton", (PyCFunction)__pyx_pw_4dnet_11ip_aton, METH_O, __pyx_doc_4dnet_10ip_aton}; +static PyObject *__pyx_pw_4dnet_11ip_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_aton (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_10ip_aton(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_f_4dnet_ip_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip_aton[] = "Convert an IP address from a printable string to a\n packed binary string (\'\\x0a\\x00\\x00\\x01\')."; -static PyObject *__pyx_f_4dnet_ip_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; +static PyObject *__pyx_pf_4dnet_10ip_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { ip_addr_t __pyx_v_ia; - PyObject *__pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":282 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; goto __pyx_L1;} - __pyx_2 = (ip_aton(__pyx_1,(&__pyx_v_ia)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":283 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_k62p, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":284 */ - __pyx_3 = PyBytes_FromStringAndSize(((char (*))(&__pyx_v_ia)),4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_aton", 0); + + /* "dnet.pyx":285 + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + * cdef ip_addr_t ia + * if __ip_aton(buf, &ia) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid IP address" + * return PyBytes_FromStringAndSize(&ia, 4) + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 285, __pyx_L1_error) + __pyx_t_2 = ((ip_aton(__pyx_t_1, (&__pyx_v_ia)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":286 + * cdef ip_addr_t ia + * if __ip_aton(buf, &ia) < 0: + * raise ValueError, "invalid IP address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(&ia, 4) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_invalid_IP_address, 0, 0); + __PYX_ERR(0, 286, __pyx_L1_error) + + /* "dnet.pyx":285 + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + * cdef ip_addr_t ia + * if __ip_aton(buf, &ia) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid IP address" + * return PyBytes_FromStringAndSize(&ia, 4) + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":287 + * if __ip_aton(buf, &ia) < 0: + * raise ValueError, "invalid IP address" + * return PyBytes_FromStringAndSize(&ia, 4) # <<<<<<<<<<<<<< + * + * def ip_checksum(pkt): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)(&__pyx_v_ia)), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.ip_aton"); - __pyx_r = 0; + + /* "dnet.pyx":281 + * return __ip_ntoa(&ia) + * + * def ip_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.ip_aton", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_TypeError; +/* "dnet.pyx":289 + * return PyBytes_FromStringAndSize(&ia, 4) + * + * def ip_checksum(pkt): # <<<<<<<<<<<<<< + * """Return packed binary string representing an IP packet + * with the IP and transport-layer checksums set. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_13ip_checksum(PyObject *__pyx_self, PyObject *__pyx_v_pkt); /*proto*/ +static char __pyx_doc_4dnet_12ip_checksum[] = "Return packed binary string representing an IP packet \n with the IP and transport-layer checksums set.\n \n Arguments:\n pkt -- binary string representing an IP packet\n "; +static PyMethodDef __pyx_mdef_4dnet_13ip_checksum = {"ip_checksum", (PyCFunction)__pyx_pw_4dnet_13ip_checksum, METH_O, __pyx_doc_4dnet_12ip_checksum}; +static PyObject *__pyx_pw_4dnet_13ip_checksum(PyObject *__pyx_self, PyObject *__pyx_v_pkt) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_checksum (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_12ip_checksum(__pyx_self, ((PyObject *)__pyx_v_pkt)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_f_4dnet_ip_checksum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip_checksum[] = "Return packed binary string representing an IP packet \n with the IP and transport-layer checksums set.\n \n Arguments:\n pkt -- binary string representing an IP packet\n "; -static PyObject *__pyx_f_4dnet_ip_checksum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_pkt = 0; - char (__pyx_v_buf[2048]); - char (*__pyx_v_p); +static PyObject *__pyx_pf_4dnet_12ip_checksum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pkt) { + char __pyx_v_buf[0x800]; + char *__pyx_v_p; int __pyx_v_n; - PyObject *__pyx_v_s; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - char (*__pyx_3); - static char *__pyx_argnames[] = {"pkt",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_pkt)) return 0; - Py_INCREF(__pyx_v_pkt); - __pyx_v_s = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":296 */ - __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_pkt,(&__pyx_v_p),(&__pyx_v_n)) == 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":297 */ - __pyx_1 = (__pyx_v_n < 2048); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":298 */ - memcpy(__pyx_v_buf,__pyx_v_p,__pyx_v_n); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":299 */ - ip_checksum(__pyx_v_buf,__pyx_v_n); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":300 */ - __pyx_2 = PyBytes_FromStringAndSize(__pyx_v_buf,__pyx_v_n); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + PyObject *__pyx_v_s = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + char *__pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_checksum", 0); + + /* "dnet.pyx":299 + * cdef char *p + * cdef int n + * if PyObject_AsReadBuffer(pkt, &p, &n) == 0: # <<<<<<<<<<<<<< + * if n < 2048: + * memcpy(buf, p, n) + */ + __pyx_t_1 = ((PyObject_AsReadBuffer(__pyx_v_pkt, (&__pyx_v_p), (&__pyx_v_n)) == 0) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":300 + * cdef int n + * if PyObject_AsReadBuffer(pkt, &p, &n) == 0: + * if n < 2048: # <<<<<<<<<<<<<< + * memcpy(buf, p, n) + * __ip_checksum(buf, n) + */ + __pyx_t_1 = ((__pyx_v_n < 0x800) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":301 + * if PyObject_AsReadBuffer(pkt, &p, &n) == 0: + * if n < 2048: + * memcpy(buf, p, n) # <<<<<<<<<<<<<< + * __ip_checksum(buf, n) + * return PyBytes_FromStringAndSize(buf, n) + */ + (void)(memcpy(__pyx_v_buf, __pyx_v_p, __pyx_v_n)); + + /* "dnet.pyx":302 + * if n < 2048: + * memcpy(buf, p, n) + * __ip_checksum(buf, n) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, n) + * p = malloc(n) + */ + ip_checksum(__pyx_v_buf, __pyx_v_n); + + /* "dnet.pyx":303 + * memcpy(buf, p, n) + * __ip_checksum(buf, n) + * return PyBytes_FromStringAndSize(buf, n) # <<<<<<<<<<<<<< + * p = malloc(n) + * memcpy(p, pkt, n) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_buf, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - goto __pyx_L3; + + /* "dnet.pyx":300 + * cdef int n + * if PyObject_AsReadBuffer(pkt, &p, &n) == 0: + * if n < 2048: # <<<<<<<<<<<<<< + * memcpy(buf, p, n) + * __ip_checksum(buf, n) + */ } - __pyx_L3:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":301 */ + /* "dnet.pyx":304 + * __ip_checksum(buf, n) + * return PyBytes_FromStringAndSize(buf, n) + * p = malloc(n) # <<<<<<<<<<<<<< + * memcpy(p, pkt, n) + * __ip_checksum(p, n) + */ __pyx_v_p = malloc(__pyx_v_n); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":302 */ - __pyx_3 = PyBytes_AsString(__pyx_v_pkt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; goto __pyx_L1;} - memcpy(__pyx_v_p,__pyx_3,__pyx_v_n); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":303 */ - ip_checksum(__pyx_v_p,__pyx_v_n); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":304 */ - __pyx_2 = PyBytes_FromStringAndSize(__pyx_v_p,__pyx_v_n); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; goto __pyx_L1;} - Py_DECREF(__pyx_v_s); - __pyx_v_s = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":305 */ + /* "dnet.pyx":305 + * return PyBytes_FromStringAndSize(buf, n) + * p = malloc(n) + * memcpy(p, pkt, n) # <<<<<<<<<<<<<< + * __ip_checksum(p, n) + * s = PyBytes_FromStringAndSize(p, n) + */ + __pyx_t_3 = __Pyx_PyObject_AsWritableString(__pyx_v_pkt); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 305, __pyx_L1_error) + (void)(memcpy(__pyx_v_p, __pyx_t_3, __pyx_v_n)); + + /* "dnet.pyx":306 + * p = malloc(n) + * memcpy(p, pkt, n) + * __ip_checksum(p, n) # <<<<<<<<<<<<<< + * s = PyBytes_FromStringAndSize(p, n) + * free(p) + */ + ip_checksum(__pyx_v_p, __pyx_v_n); + + /* "dnet.pyx":307 + * memcpy(p, pkt, n) + * __ip_checksum(p, n) + * s = PyBytes_FromStringAndSize(p, n) # <<<<<<<<<<<<<< + * free(p) + * return s + */ + __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_p, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_s = __pyx_t_2; + __pyx_t_2 = 0; + + /* "dnet.pyx":308 + * __ip_checksum(p, n) + * s = PyBytes_FromStringAndSize(p, n) + * free(p) # <<<<<<<<<<<<<< + * return s + * raise TypeError + */ free(__pyx_v_p); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":306 */ - Py_INCREF(__pyx_v_s); + /* "dnet.pyx":309 + * s = PyBytes_FromStringAndSize(p, n) + * free(p) + * return s # <<<<<<<<<<<<<< + * raise TypeError + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_s); __pyx_r = __pyx_v_s; goto __pyx_L0; - goto __pyx_L2; - } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":307 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; goto __pyx_L1;} + /* "dnet.pyx":299 + * cdef char *p + * cdef int n + * if PyObject_AsReadBuffer(pkt, &p, &n) == 0: # <<<<<<<<<<<<<< + * if n < 2048: + * memcpy(buf, p, n) + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.ip_checksum"); - __pyx_r = 0; + /* "dnet.pyx":310 + * free(p) + * return s + * raise TypeError # <<<<<<<<<<<<<< + * + * def ip_cksum_add(buf, int sum): + */ + __Pyx_Raise(__pyx_builtin_TypeError, 0, 0, 0); + __PYX_ERR(0, 310, __pyx_L1_error) + + /* "dnet.pyx":289 + * return PyBytes_FromStringAndSize(&ia, 4) + * + * def ip_checksum(pkt): # <<<<<<<<<<<<<< + * """Return packed binary string representing an IP packet + * with the IP and transport-layer checksums set. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.ip_checksum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_s); - Py_DECREF(__pyx_v_pkt); + __Pyx_XDECREF(__pyx_v_s); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip_cksum_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_4dnet_ip_cksum_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":312 + * raise TypeError + * + * def ip_cksum_add(buf, int sum): # <<<<<<<<<<<<<< + * cdef char *p + * cdef int n + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_15ip_cksum_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_4dnet_15ip_cksum_add = {"ip_cksum_add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_15ip_cksum_add, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_4dnet_15ip_cksum_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_buf = 0; int __pyx_v_sum; - char (*__pyx_v_p); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_cksum_add (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_sum,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("ip_cksum_add", 1, 2, 2, 1); __PYX_ERR(0, 312, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ip_cksum_add") < 0)) __PYX_ERR(0, 312, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_buf = values[0]; + __pyx_v_sum = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_sum == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 312, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ip_cksum_add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 312, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.ip_cksum_add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_14ip_cksum_add(__pyx_self, __pyx_v_buf, __pyx_v_sum); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_14ip_cksum_add(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf, int __pyx_v_sum) { + char *__pyx_v_p; int __pyx_v_n; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {"buf","sum",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "Oi", __pyx_argnames, &__pyx_v_buf, &__pyx_v_sum)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":312 */ - __pyx_1 = (PyObject_AsReadBuffer(__pyx_v_buf,(&__pyx_v_p),(&__pyx_v_n)) == 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":313 */ - __pyx_2 = PyLong_FromLong(ip_cksum_add(__pyx_v_p,__pyx_v_n,__pyx_v_sum)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 313; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_cksum_add", 0); + + /* "dnet.pyx":315 + * cdef char *p + * cdef int n + * if PyObject_AsReadBuffer(buf, &p, &n) == 0: # <<<<<<<<<<<<<< + * return __ip_cksum_add(p, n, sum) + * else: + */ + __pyx_t_1 = ((PyObject_AsReadBuffer(__pyx_v_buf, (&__pyx_v_p), (&__pyx_v_n)) == 0) != 0); + if (likely(__pyx_t_1)) { + + /* "dnet.pyx":316 + * cdef int n + * if PyObject_AsReadBuffer(buf, &p, &n) == 0: + * return __ip_cksum_add(p, n, sum) # <<<<<<<<<<<<<< + * else: + * raise TypeError + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_int(ip_cksum_add(__pyx_v_p, __pyx_v_n, __pyx_v_sum)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - goto __pyx_L2; + + /* "dnet.pyx":315 + * cdef char *p + * cdef int n + * if PyObject_AsReadBuffer(buf, &p, &n) == 0: # <<<<<<<<<<<<<< + * return __ip_cksum_add(p, n, sum) + * else: + */ } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":315 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; goto __pyx_L1;} + /* "dnet.pyx":318 + * return __ip_cksum_add(p, n, sum) + * else: + * raise TypeError # <<<<<<<<<<<<<< + * + * def ip_cksum_carry(int sum): + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_TypeError, 0, 0, 0); + __PYX_ERR(0, 318, __pyx_L1_error) } - __pyx_L2:; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.ip_cksum_add"); - __pyx_r = 0; + /* "dnet.pyx":312 + * raise TypeError + * + * def ip_cksum_add(buf, int sum): # <<<<<<<<<<<<<< + * cdef char *p + * cdef int n + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.ip_cksum_add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip_cksum_carry(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_4dnet_ip_cksum_carry(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":320 + * raise TypeError + * + * def ip_cksum_carry(int sum): # <<<<<<<<<<<<<< + * return __ip_cksum_carry(sum) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_17ip_cksum_carry(PyObject *__pyx_self, PyObject *__pyx_arg_sum); /*proto*/ +static PyMethodDef __pyx_mdef_4dnet_17ip_cksum_carry = {"ip_cksum_carry", (PyCFunction)__pyx_pw_4dnet_17ip_cksum_carry, METH_O, 0}; +static PyObject *__pyx_pw_4dnet_17ip_cksum_carry(PyObject *__pyx_self, PyObject *__pyx_arg_sum) { int __pyx_v_sum; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"sum",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "i", __pyx_argnames, &__pyx_v_sum)) return 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":318 */ - __pyx_1 = PyLong_FromLong(ip_cksum_carry(__pyx_v_sum)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_cksum_carry (wrapper)", 0); + assert(__pyx_arg_sum); { + __pyx_v_sum = __Pyx_PyInt_As_int(__pyx_arg_sum); if (unlikely((__pyx_v_sum == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 320, __pyx_L3_error) + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.ip_cksum_carry", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_16ip_cksum_carry(__pyx_self, ((int)__pyx_v_sum)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_16ip_cksum_carry(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_sum) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_cksum_carry", 0); + + /* "dnet.pyx":321 + * + * def ip_cksum_carry(int sum): + * return __ip_cksum_carry(sum) # <<<<<<<<<<<<<< + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(ip_cksum_carry(__pyx_v_sum)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.ip_cksum_carry"); - __pyx_r = 0; + + /* "dnet.pyx":320 + * raise TypeError + * + * def ip_cksum_carry(int sum): # <<<<<<<<<<<<<< + * return __ip_cksum_carry(sum) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip_cksum_carry", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip_pack_hdr[] = "Return a packed binary string representing an IP header.\n \n Keyword arguments:\n tos -- type of service (8-bit integer)\n len -- length (IP_HDR_LEN + payload) (16-bit integer)\n id -- packet ID (16-bit integer)\n off -- fragmentation offset (16-bit integer)\n ttl -- time-to-live (8-bit integer)\n p -- protocol (IP_PROTO_*) (8-bit integer)\n src -- source address (4-byte binary string)\n dst -- destination address (4-byte binary string)\n "; -static PyObject *__pyx_f_4dnet_ip_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":323 + * return __ip_cksum_carry(sum) + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, # <<<<<<<<<<<<<< + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_19ip_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_18ip_pack_hdr[] = "Return a packed binary string representing an IP header.\n \n Keyword arguments:\n tos -- type of service\t\t\t(8-bit integer)\n len -- length (IP_HDR_LEN + payload)\t(16-bit integer)\n id -- packet ID\t\t\t\t(16-bit integer)\n off -- fragmentation offset\t\t(16-bit integer)\n ttl -- time-to-live\t\t\t(8-bit integer)\n p -- protocol (IP_PROTO_*)\t\t(8-bit integer)\n src -- source address\t\t\t(4-byte binary string)\n dst -- destination address\t\t\t(4-byte binary string)\n "; +static PyMethodDef __pyx_mdef_4dnet_19ip_pack_hdr = {"ip_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_19ip_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_18ip_pack_hdr}; +static PyObject *__pyx_pw_4dnet_19ip_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_tos = 0; PyObject *__pyx_v_len = 0; PyObject *__pyx_v_id = 0; @@ -1191,189 +4720,493 @@ static PyObject *__pyx_f_4dnet_ip_pack_hdr(PyObject *__pyx_self, PyObject *__pyx PyObject *__pyx_v_p = 0; PyObject *__pyx_v_src = 0; PyObject *__pyx_v_dst = 0; - char (__pyx_v_hdr[20]); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tos,&__pyx_n_s_len,&__pyx_n_s_id,&__pyx_n_s_off,&__pyx_n_s_ttl,&__pyx_n_s_p,&__pyx_n_s_src,&__pyx_n_s_dst,0}; + PyObject* values[8] = {0,0,0,0,0,0,0,0}; + values[0] = __pyx_k__8; + values[1] = __pyx_k__9; + values[2] = ((PyObject *)__pyx_int_0); + values[3] = ((PyObject *)__pyx_int_0); + values[4] = __pyx_k__10; + values[5] = __pyx_k__11; + values[6] = __pyx_k__12; + values[7] = __pyx_k__13; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tos); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_len); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_id); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_off); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ttl); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src); + if (value) { values[6] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dst); + if (value) { values[7] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ip_pack_hdr") < 0)) __PYX_ERR(0, 323, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_tos = values[0]; + __pyx_v_len = values[1]; + __pyx_v_id = values[2]; + __pyx_v_off = values[3]; + __pyx_v_ttl = values[4]; + __pyx_v_p = values[5]; + __pyx_v_src = values[6]; + __pyx_v_dst = values[7]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ip_pack_hdr", 0, 0, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 323, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.ip_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_18ip_pack_hdr(__pyx_self, __pyx_v_tos, __pyx_v_len, __pyx_v_id, __pyx_v_off, __pyx_v_ttl, __pyx_v_p, __pyx_v_src, __pyx_v_dst); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_18ip_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tos, PyObject *__pyx_v_len, PyObject *__pyx_v_id, PyObject *__pyx_v_off, PyObject *__pyx_v_ttl, PyObject *__pyx_v_p, PyObject *__pyx_v_src, PyObject *__pyx_v_dst) { + char __pyx_v_hdr[20]; ip_addr_t __pyx_v_s; ip_addr_t __pyx_v_d; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - int __pyx_3; - int __pyx_4; - int __pyx_5; - int __pyx_6; - int __pyx_7; - static char *__pyx_argnames[] = {"tos","len","id","off","ttl","p","src","dst",0}; - __pyx_v_tos = __pyx_k24; - __pyx_v_len = __pyx_k25; - __pyx_v_id = __pyx_k26; - __pyx_v_off = __pyx_k27; - __pyx_v_ttl = __pyx_k28; - __pyx_v_p = __pyx_k29; - __pyx_v_src = __pyx_k30; - __pyx_v_dst = __pyx_k31; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOOOOOOO", __pyx_argnames, &__pyx_v_tos, &__pyx_v_len, &__pyx_v_id, &__pyx_v_off, &__pyx_v_ttl, &__pyx_v_p, &__pyx_v_src, &__pyx_v_dst)) return 0; - Py_INCREF(__pyx_v_tos); - Py_INCREF(__pyx_v_len); - Py_INCREF(__pyx_v_id); - Py_INCREF(__pyx_v_off); - Py_INCREF(__pyx_v_ttl); - Py_INCREF(__pyx_v_p); - Py_INCREF(__pyx_v_src); - Py_INCREF(__pyx_v_dst); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":337 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_s)),__pyx_v_src,4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":338 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_d)),__pyx_v_dst,4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":339 */ - __pyx_2 = PyLong_AsLong(__pyx_v_tos); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_v_id); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - __pyx_5 = PyLong_AsLong(__pyx_v_off); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - __pyx_6 = PyLong_AsLong(__pyx_v_ttl); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - __pyx_7 = PyLong_AsLong(__pyx_v_p); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; goto __pyx_L1;} - ip_pack_hdr(__pyx_v_hdr,__pyx_2,__pyx_3,__pyx_4,__pyx_5,__pyx_6,__pyx_7,__pyx_v_s,__pyx_v_d); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":340 */ - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_hdr,20); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip_pack_hdr", 0); + + /* "dnet.pyx":340 + * cdef char hdr[20] + * cdef ip_addr_t s, d + * __memcpy(&s, src, 4) # <<<<<<<<<<<<<< + * __memcpy(&d, dst, 4) + * __ip_pack_hdr(hdr, tos, len, id, off, ttl, p, s, d) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_s)), __pyx_v_src, 4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":341 + * cdef ip_addr_t s, d + * __memcpy(&s, src, 4) + * __memcpy(&d, dst, 4) # <<<<<<<<<<<<<< + * __ip_pack_hdr(hdr, tos, len, id, off, ttl, p, s, d) + * return PyBytes_FromStringAndSize(hdr, 20) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_d)), __pyx_v_dst, 4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":342 + * __memcpy(&s, src, 4) + * __memcpy(&d, dst, 4) + * __ip_pack_hdr(hdr, tos, len, id, off, ttl, p, s, d) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(hdr, 20) + * + */ + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_tos); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_id); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_off); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_ttl); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_p); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 342, __pyx_L1_error) + ip_pack_hdr(__pyx_v_hdr, __pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_v_s, __pyx_v_d); + + /* "dnet.pyx":343 + * __memcpy(&d, dst, 4) + * __ip_pack_hdr(hdr, tos, len, id, off, ttl, p, s, d) + * return PyBytes_FromStringAndSize(hdr, 20) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_hdr, 20); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.ip_pack_hdr"); - __pyx_r = 0; + /* "dnet.pyx":323 + * return __ip_cksum_carry(sum) + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, # <<<<<<<<<<<<<< + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_tos); - Py_DECREF(__pyx_v_len); - Py_DECREF(__pyx_v_id); - Py_DECREF(__pyx_v_off); - Py_DECREF(__pyx_v_ttl); - Py_DECREF(__pyx_v_p); - Py_DECREF(__pyx_v_src); - Py_DECREF(__pyx_v_dst); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip6_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip6_ntoa[] = "Convert an IPv6 address from a 16-byte packed binary string to a\n printable string (\'10.0.0.1\')."; -static PyObject *__pyx_f_4dnet_ip6_ntoa(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; +/* "dnet.pyx":373 + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) + * + * def ip6_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a 16-byte packed binary string to a + * printable string ('10.0.0.1').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_21ip6_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_20ip6_ntoa[] = "Convert an IPv6 address from a 16-byte packed binary string to a\n printable string ('10.0.0.1')."; +static PyMethodDef __pyx_mdef_4dnet_21ip6_ntoa = {"ip6_ntoa", (PyCFunction)__pyx_pw_4dnet_21ip6_ntoa, METH_O, __pyx_doc_4dnet_20ip6_ntoa}; +static PyObject *__pyx_pw_4dnet_21ip6_ntoa(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip6_ntoa (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_20ip6_ntoa(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_20ip6_ntoa(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { ip6_addr_t __pyx_v_ia; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":374 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_ia)),__pyx_v_buf,16); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":375 */ - __pyx_1 = PyBytes_FromString(ip6_ntoa((&__pyx_v_ia))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip6_ntoa", 0); + + /* "dnet.pyx":377 + * printable string ('10.0.0.1').""" + * cdef ip6_addr_t ia + * __memcpy(&ia, buf, 16) # <<<<<<<<<<<<<< + * return __ip6_ntoa(&ia) + * + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_ia)), __pyx_v_buf, 16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":378 + * cdef ip6_addr_t ia + * __memcpy(&ia, buf, 16) + * return __ip6_ntoa(&ia) # <<<<<<<<<<<<<< + * + * def ip6_aton(buf): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyStr_FromString(ip6_ntoa((&__pyx_v_ia))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 378, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.ip6_ntoa"); - __pyx_r = 0; + /* "dnet.pyx":373 + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) + * + * def ip6_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a 16-byte packed binary string to a + * printable string ('10.0.0.1').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip6_ntoa", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k63p; - -static char (__pyx_k63[]) = "invalid IPv6 address"; +/* "dnet.pyx":380 + * return __ip6_ntoa(&ia) + * + * def ip6_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_23ip6_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_22ip6_aton[] = "Convert an IPv6 address from a printable string to a\n packed binary string ('\\x0a\\x00\\x00\\x01')."; +static PyMethodDef __pyx_mdef_4dnet_23ip6_aton = {"ip6_aton", (PyCFunction)__pyx_pw_4dnet_23ip6_aton, METH_O, __pyx_doc_4dnet_22ip6_aton}; +static PyObject *__pyx_pw_4dnet_23ip6_aton(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip6_aton (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_22ip6_aton(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_f_4dnet_ip6_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip6_aton[] = "Convert an IPv6 address from a printable string to a\n packed binary string (\'\\x0a\\x00\\x00\\x01\')."; -static PyObject *__pyx_f_4dnet_ip6_aton(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; +static PyObject *__pyx_pf_4dnet_22ip6_aton(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { ip6_addr_t __pyx_v_ia; - PyObject *__pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":381 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; goto __pyx_L1;} - __pyx_2 = (ip6_aton(__pyx_1,(&__pyx_v_ia)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":382 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_k63p, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 382; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":383 */ - __pyx_3 = PyBytes_FromStringAndSize(((char (*))(&__pyx_v_ia)),16); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 383; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip6_aton", 0); + + /* "dnet.pyx":384 + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + * cdef ip6_addr_t ia + * if __ip6_aton(buf, &ia) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid IPv6 address" + * return PyBytes_FromStringAndSize(&ia, 16) + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L1_error) + __pyx_t_2 = ((ip6_aton(__pyx_t_1, (&__pyx_v_ia)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":385 + * cdef ip6_addr_t ia + * if __ip6_aton(buf, &ia) < 0: + * raise ValueError, "invalid IPv6 address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(&ia, 16) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_invalid_IPv6_address, 0, 0); + __PYX_ERR(0, 385, __pyx_L1_error) + + /* "dnet.pyx":384 + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + * cdef ip6_addr_t ia + * if __ip6_aton(buf, &ia) < 0: # <<<<<<<<<<<<<< + * raise ValueError, "invalid IPv6 address" + * return PyBytes_FromStringAndSize(&ia, 16) + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":386 + * if __ip6_aton(buf, &ia) < 0: + * raise ValueError, "invalid IPv6 address" + * return PyBytes_FromStringAndSize(&ia, 16) # <<<<<<<<<<<<<< + * + * def ip6_checksum(buf): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)(&__pyx_v_ia)), 16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 386, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.ip6_aton"); - __pyx_r = 0; + + /* "dnet.pyx":380 + * return __ip6_ntoa(&ia) + * + * def ip6_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.ip6_aton", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip6_checksum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip6_checksum[] = "Return a packed binary string representing an IPv6 packet \n with the IPv6 and transport-layer checksums set.\n\n Arguments:\n pkt -- binary string representing an IPv6 packet\n "; -static PyObject *__pyx_f_4dnet_ip6_checksum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_r; - char (*__pyx_1); - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":392 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; goto __pyx_L1;} - ip6_checksum(__pyx_1,PyBytes_Size(__pyx_v_buf)); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":393 */ - Py_INCREF(__pyx_v_buf); +/* "dnet.pyx":388 + * return PyBytes_FromStringAndSize(&ia, 16) + * + * def ip6_checksum(buf): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IPv6 packet + * with the IPv6 and transport-layer checksums set. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_25ip6_checksum(PyObject *__pyx_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_24ip6_checksum[] = "Return a packed binary string representing an IPv6 packet \n with the IPv6 and transport-layer checksums set.\n\n Arguments:\n pkt -- binary string representing an IPv6 packet\n "; +static PyMethodDef __pyx_mdef_4dnet_25ip6_checksum = {"ip6_checksum", (PyCFunction)__pyx_pw_4dnet_25ip6_checksum, METH_O, __pyx_doc_4dnet_24ip6_checksum}; +static PyObject *__pyx_pw_4dnet_25ip6_checksum(PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip6_checksum (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_24ip6_checksum(__pyx_self, ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_24ip6_checksum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip6_checksum", 0); + + /* "dnet.pyx":395 + * pkt -- binary string representing an IPv6 packet + * """ + * __ip6_checksum(buf, PyBytes_Size(buf)) # <<<<<<<<<<<<<< + * return buf + * + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 395, __pyx_L1_error) + ip6_checksum(__pyx_t_1, PyBytes_Size(__pyx_v_buf)); + + /* "dnet.pyx":396 + * """ + * __ip6_checksum(buf, PyBytes_Size(buf)) + * return buf # <<<<<<<<<<<<<< + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_buf); __pyx_r = __pyx_v_buf; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.ip6_checksum"); - __pyx_r = 0; + /* "dnet.pyx":388 + * return PyBytes_FromStringAndSize(&ia, 16) + * + * def ip6_checksum(buf): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IPv6 packet + * with the IPv6 and transport-layer checksums set. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.ip6_checksum", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_ip6_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_ip6_pack_hdr[] = "Return a packed binary string representing an IPv6 header.\n \n Keyword arguments:\n fc -- flow class (8-bit integer)\n fl -- flow label (20-bit integer)\n plen -- payload length (16-bit integer)\n nxt -- next header (IP_PROTO_*) (8-bit integer)\n hlim -- hop limit (8-bit integer)\n src -- source address (16-byte binary string)\n dst -- destination address (16-byte binary string)\n "; -static PyObject *__pyx_f_4dnet_ip6_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":398 + * return buf + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, # <<<<<<<<<<<<<< + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): + * """Return a packed binary string representing an IPv6 header. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_27ip6_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_26ip6_pack_hdr[] = "Return a packed binary string representing an IPv6 header.\n \n Keyword arguments:\n fc -- flow class\t\t\t(8-bit integer)\n fl -- flow label\t\t\t(20-bit integer)\n plen -- payload length\t\t(16-bit integer)\n nxt -- next header (IP_PROTO_*)\t(8-bit integer)\n hlim -- hop limit\t\t\t(8-bit integer)\n src -- source address\t\t(16-byte binary string)\n dst -- destination address\t\t(16-byte binary string)\n "; +static PyMethodDef __pyx_mdef_4dnet_27ip6_pack_hdr = {"ip6_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_27ip6_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_26ip6_pack_hdr}; +static PyObject *__pyx_pw_4dnet_27ip6_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_fc = 0; PyObject *__pyx_v_fl = 0; PyObject *__pyx_v_plen = 0; @@ -1381,5833 +5214,13796 @@ static PyObject *__pyx_f_4dnet_ip6_pack_hdr(PyObject *__pyx_self, PyObject *__py PyObject *__pyx_v_hlim = 0; PyObject *__pyx_v_src = 0; PyObject *__pyx_v_dst = 0; - char (__pyx_v_hdr[40]); + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("ip6_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fc,&__pyx_n_s_fl,&__pyx_n_s_plen,&__pyx_n_s_nxt,&__pyx_n_s_hlim,&__pyx_n_s_src,&__pyx_n_s_dst,0}; + PyObject* values[7] = {0,0,0,0,0,0,0}; + values[0] = ((PyObject *)__pyx_int_0); + values[1] = ((PyObject *)__pyx_int_0); + values[2] = ((PyObject *)__pyx_int_0); + values[3] = __pyx_k__14; + values[4] = __pyx_k__15; + values[5] = __pyx_k__16; + values[6] = __pyx_k__17; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fc); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fl); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_plen); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nxt); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_hlim); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dst); + if (value) { values[6] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ip6_pack_hdr") < 0)) __PYX_ERR(0, 398, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_fc = values[0]; + __pyx_v_fl = values[1]; + __pyx_v_plen = values[2]; + __pyx_v_nxt = values[3]; + __pyx_v_hlim = values[4]; + __pyx_v_src = values[5]; + __pyx_v_dst = values[6]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("ip6_pack_hdr", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 398, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.ip6_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_26ip6_pack_hdr(__pyx_self, __pyx_v_fc, __pyx_v_fl, __pyx_v_plen, __pyx_v_nxt, __pyx_v_hlim, __pyx_v_src, __pyx_v_dst); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_26ip6_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fc, PyObject *__pyx_v_fl, PyObject *__pyx_v_plen, PyObject *__pyx_v_nxt, PyObject *__pyx_v_hlim, PyObject *__pyx_v_src, PyObject *__pyx_v_dst) { + char __pyx_v_hdr[40]; ip6_addr_t __pyx_v_s; ip6_addr_t __pyx_v_d; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - int __pyx_3; - int __pyx_4; - int __pyx_5; - int __pyx_6; - static char *__pyx_argnames[] = {"fc","fl","plen","nxt","hlim","src","dst",0}; - __pyx_v_fc = __pyx_k34; - __pyx_v_fl = __pyx_k35; - __pyx_v_plen = __pyx_k36; - __pyx_v_nxt = __pyx_k37; - __pyx_v_hlim = __pyx_k38; - __pyx_v_src = __pyx_k39; - __pyx_v_dst = __pyx_k40; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOOOOOO", __pyx_argnames, &__pyx_v_fc, &__pyx_v_fl, &__pyx_v_plen, &__pyx_v_nxt, &__pyx_v_hlim, &__pyx_v_src, &__pyx_v_dst)) return 0; - Py_INCREF(__pyx_v_fc); - Py_INCREF(__pyx_v_fl); - Py_INCREF(__pyx_v_plen); - Py_INCREF(__pyx_v_nxt); - Py_INCREF(__pyx_v_hlim); - Py_INCREF(__pyx_v_src); - Py_INCREF(__pyx_v_dst); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":410 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_s)),__pyx_v_src,16); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":411 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_d)),__pyx_v_dst,16); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":412 */ - __pyx_2 = PyLong_AsLong(__pyx_v_fc); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_v_fl); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_v_plen); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;} - __pyx_5 = PyLong_AsLong(__pyx_v_nxt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;} - __pyx_6 = PyLong_AsLong(__pyx_v_hlim); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; goto __pyx_L1;} - ip6_pack_hdr(__pyx_v_hdr,__pyx_2,__pyx_3,__pyx_4,__pyx_5,__pyx_6,__pyx_v_s,__pyx_v_d); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":413 */ - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_hdr,40); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ip6_pack_hdr", 0); + + /* "dnet.pyx":413 + * cdef char hdr[40] + * cdef ip6_addr_t s, d + * __memcpy(&s, src, 16) # <<<<<<<<<<<<<< + * __memcpy(&d, dst, 16) + * __ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, s, d) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_s)), __pyx_v_src, 16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":414 + * cdef ip6_addr_t s, d + * __memcpy(&s, src, 16) + * __memcpy(&d, dst, 16) # <<<<<<<<<<<<<< + * __ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, s, d) + * return PyBytes_FromStringAndSize(hdr, 40) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_d)), __pyx_v_dst, 16); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":415 + * __memcpy(&s, src, 16) + * __memcpy(&d, dst, 16) + * __ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, s, d) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(hdr, 40) + * + */ + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_fc); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_fl); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_plen); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_nxt); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_hlim); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 415, __pyx_L1_error) + ip6_pack_hdr(__pyx_v_hdr, __pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_v_s, __pyx_v_d); + + /* "dnet.pyx":416 + * __memcpy(&d, dst, 16) + * __ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, s, d) + * return PyBytes_FromStringAndSize(hdr, 40) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_hdr, 40); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 416, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.ip6_pack_hdr"); - __pyx_r = 0; + /* "dnet.pyx":398 + * return buf + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, # <<<<<<<<<<<<<< + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): + * """Return a packed binary string representing an IPv6 header. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.ip6_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_fc); - Py_DECREF(__pyx_v_fl); - Py_DECREF(__pyx_v_plen); - Py_DECREF(__pyx_v_nxt); - Py_DECREF(__pyx_v_hlim); - Py_DECREF(__pyx_v_src); - Py_DECREF(__pyx_v_dst); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_ip; - -static PyObject *__pyx_k64p; - -static char (__pyx_k64[]) = "invalid network address"; - -static int __pyx_f_4dnet_4addr___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_4addr___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":447 + * cdef addr_t _addr + * + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): # <<<<<<<<<<<<<< + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_4addr_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_addrtxt = 0; - PyObject *__pyx_v_type = 0; + CYTHON_UNUSED PyObject *__pyx_v_addrtype = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; int __pyx_r; - int __pyx_1; - char (*__pyx_2); - PyObject *__pyx_3 = 0; - unsigned short __pyx_4; - static char *__pyx_argnames[] = {"addrtxt","type",0}; - __pyx_v_addrtxt = __pyx_k41; - __pyx_v_type = __pyx_k42; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OO", __pyx_argnames, &__pyx_v_addrtxt, &__pyx_v_type)) return -1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_addrtxt); - Py_INCREF(__pyx_v_type); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":445 */ - if (__pyx_1=PyObject_RichCompareBool(__pyx_v_addrtxt, Py_None, Py_EQ) == 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;} - __pyx_1 = __pyx_1 != 0; - if (__pyx_1) { - __pyx_2 = PyBytes_AsString(__pyx_v_addrtxt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; goto __pyx_L1;} - __pyx_1 = (addr_aton(__pyx_2,(&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr)) < 0); - } - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":446 */ - __pyx_1 = (PyBytes_Size(__pyx_v_addrtxt) == 4); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":447 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":448 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_BITS); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":449 */ - if (PyObject_SetAttr(__pyx_v_self, __pyx_n_ip, __pyx_v_addrtxt) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; goto __pyx_L1;} - goto __pyx_L3; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_addrtxt,&__pyx_n_s_addrtype,0}; + PyObject* values[2] = {0,0}; + values[0] = ((PyObject *)Py_None); + values[1] = __pyx_k__18; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addrtxt); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addrtype); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 447, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_addrtxt = values[0]; + __pyx_v_addrtype = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 447, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.addr.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_4addr___init__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), __pyx_v_addrtxt, __pyx_v_addrtype); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_4dnet_4addr___init__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_addrtxt, CYTHON_UNUSED PyObject *__pyx_v_addrtype) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_t_3; + char *__pyx_t_4; + unsigned short __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":448 + * + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: # <<<<<<<<<<<<<< + * if PyBytes_Size(addrtxt) == 4: + * self._addr.addr_type = ADDR_TYPE_IP + */ + __pyx_t_2 = PyObject_RichCompare(__pyx_v_addrtxt, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 448, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 448, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_3) { + } else { + __pyx_t_1 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_PyObject_AsWritableString(__pyx_v_addrtxt); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 448, __pyx_L1_error) + __pyx_t_3 = ((addr_aton(__pyx_t_4, (&__pyx_v_self->_addr)) < 0) != 0); + __pyx_t_1 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (__pyx_t_1) { + + /* "dnet.pyx":449 + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: # <<<<<<<<<<<<<< + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS + */ + __pyx_t_1 = ((PyBytes_Size(__pyx_v_addrtxt) == 4) != 0); + if (likely(__pyx_t_1)) { + + /* "dnet.pyx":450 + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: + * self._addr.addr_type = ADDR_TYPE_IP # <<<<<<<<<<<<<< + * self._addr.addr_bits = IP_ADDR_BITS + * self.ip = addrtxt + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 450, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_self->_addr.addr_type = __pyx_t_5; + + /* "dnet.pyx":451 + * if PyBytes_Size(addrtxt) == 4: + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS # <<<<<<<<<<<<<< + * self.ip = addrtxt + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_IP_ADDR_BITS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_self->_addr.addr_bits = __pyx_t_5; + + /* "dnet.pyx":452 + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS + * self.ip = addrtxt # <<<<<<<<<<<<<< + * else: + * raise ValueError, "invalid network address" + */ + if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_ip, __pyx_v_addrtxt) < 0) __PYX_ERR(0, 452, __pyx_L1_error) + + /* "dnet.pyx":449 + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: # <<<<<<<<<<<<<< + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS + */ + goto __pyx_L6; } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":451 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_k64p, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; goto __pyx_L1;} + /* "dnet.pyx":454 + * self.ip = addrtxt + * else: + * raise ValueError, "invalid network address" # <<<<<<<<<<<<<< + * + * property addrtype: + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_invalid_network_address, 0, 0); + __PYX_ERR(0, 454, __pyx_L1_error) } - __pyx_L3:; - goto __pyx_L2; + __pyx_L6:; + + /* "dnet.pyx":448 + * + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: # <<<<<<<<<<<<<< + * if PyBytes_Size(addrtxt) == 4: + * self._addr.addr_type = ADDR_TYPE_IP + */ } - __pyx_L2:; + /* "dnet.pyx":447 + * cdef addr_t _addr + * + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): # <<<<<<<<<<<<<< + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.addr.__init__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.addr.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_addrtxt); - Py_DECREF(__pyx_v_type); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4addr_4type___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_4type___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":458 + * property addrtype: + * """Address type (ADDR_TYPE_*) integer.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return self._addr.addr_type + * def __set__(self, unsigned int value): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_8addrtype_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_8addrtype_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_8addrtype___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":456 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; +static PyObject *__pyx_pf_4dnet_4addr_8addrtype___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":459 + * """Address type (ADDR_TYPE_*) integer.""" + * def __get__(self): + * return self._addr.addr_type # <<<<<<<<<<<<<< + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 459, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.addr.type.__get__"); - __pyx_r = 0; + /* "dnet.pyx":458 + * property addrtype: + * """Address type (ADDR_TYPE_*) integer.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return self._addr.addr_type + * def __set__(self, unsigned int value): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.addrtype.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_OverflowError; - -static int __pyx_f_4dnet_4addr_4type___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/ -static int __pyx_f_4dnet_4addr_4type___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) { +/* "dnet.pyx":460 + * def __get__(self): + * return self._addr.addr_type + * def __set__(self, unsigned int value): # <<<<<<<<<<<<<< + * if value > 0xffff: raise OverflowError + * self._addr.addr_type = value + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_8addrtype_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/ +static int __pyx_pw_4dnet_4addr_8addrtype_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) { unsigned int __pyx_v_value; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_value = PyLong_AsUnsignedLongMask(__pyx_arg_value); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":458 */ - __pyx_1 = (__pyx_v_value > 65535); - if (__pyx_1) { - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OverflowError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; goto __pyx_L1;} - goto __pyx_L2; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + assert(__pyx_arg_value); { + __pyx_v_value = __Pyx_PyInt_As_unsigned_int(__pyx_arg_value); if (unlikely((__pyx_v_value == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 460, __pyx_L3_error) } - __pyx_L2:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.addr.addrtype.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_4addr_8addrtype_2__set__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((unsigned int)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":459 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type = __pyx_v_value; +static int __pyx_pf_4dnet_4addr_8addrtype_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, unsigned int __pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "dnet.pyx":461 + * return self._addr.addr_type + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError # <<<<<<<<<<<<<< + * self._addr.addr_type = value + * + */ + __pyx_t_1 = ((__pyx_v_value > 0xffff) != 0); + if (unlikely(__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_OverflowError, 0, 0, 0); + __PYX_ERR(0, 461, __pyx_L1_error) + } + /* "dnet.pyx":462 + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError + * self._addr.addr_type = value # <<<<<<<<<<<<<< + * + * property bits: + */ + __pyx_v_self->_addr.addr_type = __pyx_v_value; + + /* "dnet.pyx":460 + * def __get__(self): + * return self._addr.addr_type + * def __set__(self, unsigned int value): # <<<<<<<<<<<<<< + * if value > 0xffff: raise OverflowError + * self._addr.addr_type = value + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.type.__set__"); + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.addr.addrtype.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4addr_4bits___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_4bits___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":466 + * property bits: + * """Address bitlength integer.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return self._addr.addr_bits + * def __set__(self, unsigned int value): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_4bits_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_4bits_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_4bits___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":464 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; +static PyObject *__pyx_pf_4dnet_4addr_4bits___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":467 + * """Address bitlength integer.""" + * def __get__(self): + * return self._addr.addr_bits # <<<<<<<<<<<<<< + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_bits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.addr.bits.__get__"); - __pyx_r = 0; + /* "dnet.pyx":466 + * property bits: + * """Address bitlength integer.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return self._addr.addr_bits + * def __set__(self, unsigned int value): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.bits.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_4addr_4bits___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/ -static int __pyx_f_4dnet_4addr_4bits___set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) { +/* "dnet.pyx":468 + * def __get__(self): + * return self._addr.addr_bits + * def __set__(self, unsigned int value): # <<<<<<<<<<<<<< + * if value > 0xffff: raise OverflowError + * self._addr.addr_bits = value + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_4bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/ +static int __pyx_pw_4dnet_4addr_4bits_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) { unsigned int __pyx_v_value; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_value = PyLong_AsUnsignedLongMask(__pyx_arg_value); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":466 */ - __pyx_1 = (__pyx_v_value > 65535); - if (__pyx_1) { - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OverflowError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; goto __pyx_L1;} - goto __pyx_L2; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + assert(__pyx_arg_value); { + __pyx_v_value = __Pyx_PyInt_As_unsigned_int(__pyx_arg_value); if (unlikely((__pyx_v_value == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 468, __pyx_L3_error) } - __pyx_L2:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.addr.bits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_4addr_4bits_2__set__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((unsigned int)__pyx_v_value)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":467 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits = __pyx_v_value; +static int __pyx_pf_4dnet_4addr_4bits_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, unsigned int __pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "dnet.pyx":469 + * return self._addr.addr_bits + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError # <<<<<<<<<<<<<< + * self._addr.addr_bits = value + * + */ + __pyx_t_1 = ((__pyx_v_value > 0xffff) != 0); + if (unlikely(__pyx_t_1)) { + __Pyx_Raise(__pyx_builtin_OverflowError, 0, 0, 0); + __PYX_ERR(0, 469, __pyx_L1_error) + } + /* "dnet.pyx":470 + * def __set__(self, unsigned int value): + * if value > 0xffff: raise OverflowError + * self._addr.addr_bits = value # <<<<<<<<<<<<<< + * + * property data: + */ + __pyx_v_self->_addr.addr_bits = __pyx_v_value; + + /* "dnet.pyx":468 + * def __get__(self): + * return self._addr.addr_bits + * def __set__(self, unsigned int value): # <<<<<<<<<<<<<< + * if value > 0xffff: raise OverflowError + * self._addr.addr_bits = value + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.bits.__set__"); + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.addr.bits.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n_eth; -static PyObject *__pyx_n_ip6; +/* "dnet.pyx":474 + * property data: + * """Raw address string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type == ADDR_TYPE_ETH: + * return self.eth + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_4data_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_4data_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_4data___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_k65p; +static PyObject *__pyx_pf_4dnet_4addr_4data___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":475 + * """Raw address string.""" + * def __get__(self): + * if self._addr.addr_type == ADDR_TYPE_ETH: # <<<<<<<<<<<<<< + * return self.eth + * elif self._addr.addr_type == ADDR_TYPE_IP: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_ETH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 475, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "dnet.pyx":476 + * def __get__(self): + * if self._addr.addr_type == ADDR_TYPE_ETH: + * return self.eth # <<<<<<<<<<<<<< + * elif self._addr.addr_type == ADDR_TYPE_IP: + * return self.ip + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_eth); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; -static char (__pyx_k65[]) = "invalid network address"; + /* "dnet.pyx":475 + * """Raw address string.""" + * def __get__(self): + * if self._addr.addr_type == ADDR_TYPE_ETH: # <<<<<<<<<<<<<< + * return self.eth + * elif self._addr.addr_type == ADDR_TYPE_IP: + */ + } -static PyObject *__pyx_f_4dnet_4addr_4data___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_4data___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - Py_INCREF(__pyx_v_self); + /* "dnet.pyx":477 + * if self._addr.addr_type == ADDR_TYPE_ETH: + * return self.eth + * elif self._addr.addr_type == ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * return self.ip + * elif self._addr.addr_type == ADDR_TYPE_IP6: + */ + __pyx_t_3 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_4) { + + /* "dnet.pyx":478 + * return self.eth + * elif self._addr.addr_type == ADDR_TYPE_IP: + * return self.ip # <<<<<<<<<<<<<< + * elif self._addr.addr_type == ADDR_TYPE_IP6: + * return self.ip6 + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_ip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 478, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":472 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_ETH); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { + /* "dnet.pyx":477 + * if self._addr.addr_type == ADDR_TYPE_ETH: + * return self.eth + * elif self._addr.addr_type == ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * return self.ip + * elif self._addr.addr_type == ADDR_TYPE_IP6: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":473 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_eth); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + /* "dnet.pyx":479 + * elif self._addr.addr_type == ADDR_TYPE_IP: + * return self.ip + * elif self._addr.addr_type == ADDR_TYPE_IP6: # <<<<<<<<<<<<<< + * return self.ip6 + * else: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (likely(__pyx_t_4)) { + + /* "dnet.pyx":480 + * return self.ip + * elif self._addr.addr_type == ADDR_TYPE_IP6: + * return self.ip6 # <<<<<<<<<<<<<< + * else: + * raise ValueError, "invalid network address" + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_ip6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - goto __pyx_L2; - } - __pyx_2 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;} - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":475 */ - __pyx_2 = PyObject_GetAttr(__pyx_v_self, __pyx_n_ip); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 475; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; - goto __pyx_L2; - } - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":477 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_ip6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - goto __pyx_L2; + + /* "dnet.pyx":479 + * elif self._addr.addr_type == ADDR_TYPE_IP: + * return self.ip + * elif self._addr.addr_type == ADDR_TYPE_IP6: # <<<<<<<<<<<<<< + * return self.ip6 + * else: + */ } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":479 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_k65p, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; goto __pyx_L1;} + /* "dnet.pyx":482 + * return self.ip6 + * else: + * raise ValueError, "invalid network address" # <<<<<<<<<<<<<< + * + * property eth: + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_invalid_network_address, 0, 0); + __PYX_ERR(0, 482, __pyx_L1_error) } - __pyx_L2:; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.data.__get__"); - __pyx_r = 0; + /* "dnet.pyx":474 + * property data: + * """Raw address string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type == ADDR_TYPE_ETH: + * return self.eth + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k66p; - -static char (__pyx_k66[]) = "non-Ethernet address"; - -static PyObject *__pyx_f_4dnet_4addr_3eth___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_3eth___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":484 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_ETH); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { +/* "dnet.pyx":486 + * property eth: + * """Ethernet MAC address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_ETH: + * raise ValueError, "non-Ethernet address" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_3eth_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_3eth_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_3eth___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":485 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_k66p, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; goto __pyx_L1;} - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_4addr_3eth___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":487 + * """Ethernet MAC address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_ETH: # <<<<<<<<<<<<<< + * raise ValueError, "non-Ethernet address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_ETH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":488 + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_ETH: + * raise ValueError, "non-Ethernet address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_non_Ethernet_address, 0, 0); + __PYX_ERR(0, 488, __pyx_L1_error) + + /* "dnet.pyx":487 + * """Ethernet MAC address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_ETH: # <<<<<<<<<<<<<< + * raise ValueError, "non-Ethernet address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":486 */ - __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 486; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + /* "dnet.pyx":489 + * if self._addr.addr_type != ADDR_TYPE_ETH: + * raise ValueError, "non-Ethernet address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) # <<<<<<<<<<<<<< + * + * def __set__(self, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(__pyx_v_self->_addr.addr_data8, 6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 489, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.eth.__get__"); - __pyx_r = 0; + /* "dnet.pyx":486 + * property eth: + * """Ethernet MAC address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_ETH: + * raise ValueError, "non-Ethernet address" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.eth.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k67p; +/* "dnet.pyx":491 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * if PyBytes_Size(value) != ETH_ADDR_LEN: + * raise ValueError, "not a 6-byte string" + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_3eth_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_4dnet_4addr_3eth_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_3eth_2__set__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((PyObject *)__pyx_v_value)); -static char (__pyx_k67[]) = "not a 6-byte string"; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static int __pyx_f_4dnet_4addr_3eth___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_f_4dnet_4addr_3eth___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { +static int __pyx_pf_4dnet_4addr_3eth_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - unsigned short __pyx_4; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_value); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":489 */ - __pyx_1 = PyLong_FromLong(PyBytes_Size(__pyx_v_value)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_LEN); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2,Py_EQ ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":490 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_k67p, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":491 */ - __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":492 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_ETH); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":493 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_BITS); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits = __pyx_4; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + unsigned short __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "dnet.pyx":492 + * + * def __set__(self, value): + * if PyBytes_Size(value) != ETH_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 6-byte string" + * __memcpy(self._addr.addr_data8, value, 6) + */ + __pyx_t_1 = __Pyx_PyInt_From_int(PyBytes_Size(__pyx_v_value)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ETH_ADDR_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 492, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":493 + * def __set__(self, value): + * if PyBytes_Size(value) != ETH_ADDR_LEN: + * raise ValueError, "not a 6-byte string" # <<<<<<<<<<<<<< + * __memcpy(self._addr.addr_data8, value, 6) + * self._addr.addr_type = ADDR_TYPE_ETH + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_not_a_6_byte_string, 0, 0); + __PYX_ERR(0, 493, __pyx_L1_error) + + /* "dnet.pyx":492 + * + * def __set__(self, value): + * if PyBytes_Size(value) != ETH_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 6-byte string" + * __memcpy(self._addr.addr_data8, value, 6) + */ + } + /* "dnet.pyx":494 + * if PyBytes_Size(value) != ETH_ADDR_LEN: + * raise ValueError, "not a 6-byte string" + * __memcpy(self._addr.addr_data8, value, 6) # <<<<<<<<<<<<<< + * self._addr.addr_type = ADDR_TYPE_ETH + * self._addr.addr_bits = ETH_ADDR_BITS + */ + __pyx_t_3 = __pyx_f_4dnet___memcpy(__pyx_v_self->_addr.addr_data8, __pyx_v_value, 6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 494, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":495 + * raise ValueError, "not a 6-byte string" + * __memcpy(self._addr.addr_data8, value, 6) + * self._addr.addr_type = ADDR_TYPE_ETH # <<<<<<<<<<<<<< + * self._addr.addr_bits = ETH_ADDR_BITS + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_ETH); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 495, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_self->_addr.addr_type = __pyx_t_5; + + /* "dnet.pyx":496 + * __memcpy(self._addr.addr_data8, value, 6) + * self._addr.addr_type = ADDR_TYPE_ETH + * self._addr.addr_bits = ETH_ADDR_BITS # <<<<<<<<<<<<<< + * + * property ip: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ETH_ADDR_BITS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 496, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_self->_addr.addr_bits = __pyx_t_5; + + /* "dnet.pyx":491 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 6) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * if PyBytes_Size(value) != ETH_ADDR_LEN: + * raise ValueError, "not a 6-byte string" + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.eth.__set__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.eth.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_value); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k68p; - -static char (__pyx_k68[]) = "non-IP address"; - -static PyObject *__pyx_f_4dnet_4addr_2ip___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_2ip___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":498 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { +/* "dnet.pyx":500 + * property ip: + * """IPv4 address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise ValueError, "non-IP address" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_2ip_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_2ip_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_2ip___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":499 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_k68p, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; goto __pyx_L1;} - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_4addr_2ip___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":501 + * """IPv4 address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * raise ValueError, "non-IP address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 501, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":502 + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise ValueError, "non-IP address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_non_IP_address, 0, 0); + __PYX_ERR(0, 502, __pyx_L1_error) + + /* "dnet.pyx":501 + * """IPv4 address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * raise ValueError, "non-IP address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":500 */ - __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,4); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + /* "dnet.pyx":503 + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise ValueError, "non-IP address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) # <<<<<<<<<<<<<< + * + * def __set__(self, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(__pyx_v_self->_addr.addr_data8, 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 503, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.ip.__get__"); - __pyx_r = 0; + /* "dnet.pyx":500 + * property ip: + * """IPv4 address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise ValueError, "non-IP address" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.ip.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k69p; +/* "dnet.pyx":505 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * # XXX - handle < 2.3, or else we'd use PyLong_AsUnsignedLongMask() + * if PyLong_Check(value): + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_2ip_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_4dnet_4addr_2ip_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_2ip_2__set__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((PyObject *)__pyx_v_value)); -static char (__pyx_k69[]) = "not a 4-byte string"; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static int __pyx_f_4dnet_4addr_2ip___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_f_4dnet_4addr_2ip___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { +static int __pyx_pf_4dnet_4addr_2ip_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - unsigned short __pyx_4; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_value); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":504 */ - __pyx_1 = PyLong_Check(__pyx_v_value); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":505 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_ip = htonl(PyLong_AsLong(__pyx_v_value)); - goto __pyx_L2; - } - __pyx_1 = PyLong_Check(__pyx_v_value); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":507 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_ip = htonl(PyLong_AsUnsignedLong(__pyx_v_value)); - goto __pyx_L2; - } - __pyx_2 = PyLong_FromLong(PyBytes_Size(__pyx_v_value)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;} - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_LEN); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;} - if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; goto __pyx_L1;} - __pyx_1 = __pyx_1 != 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":509 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_k69p, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 509; goto __pyx_L1;} - goto __pyx_L2; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned short __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "dnet.pyx":507 + * def __set__(self, value): + * # XXX - handle < 2.3, or else we'd use PyLong_AsUnsignedLongMask() + * if PyLong_Check(value): # <<<<<<<<<<<<<< + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) + * elif PyLong_Check(value): + */ + __pyx_t_1 = (PyLong_Check(__pyx_v_value) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":508 + * # XXX - handle < 2.3, or else we'd use PyLong_AsUnsignedLongMask() + * if PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) # <<<<<<<<<<<<<< + * elif PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + */ + __pyx_v_self->_addr.addr_ip = htonl(PyLong_AsLong(__pyx_v_value)); + + /* "dnet.pyx":507 + * def __set__(self, value): + * # XXX - handle < 2.3, or else we'd use PyLong_AsUnsignedLongMask() + * if PyLong_Check(value): # <<<<<<<<<<<<<< + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) + * elif PyLong_Check(value): + */ + goto __pyx_L3; } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":511 */ - __pyx_3 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,4); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; + /* "dnet.pyx":509 + * if PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) + * elif PyLong_Check(value): # <<<<<<<<<<<<<< + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + * elif PyBytes_Size(value) != IP_ADDR_LEN: + */ + __pyx_t_1 = (PyLong_Check(__pyx_v_value) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":510 + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) + * elif PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) # <<<<<<<<<<<<<< + * elif PyBytes_Size(value) != IP_ADDR_LEN: + * raise ValueError, "not a 4-byte string" + */ + __pyx_v_self->_addr.addr_ip = htonl(PyLong_AsUnsignedLong(__pyx_v_value)); + + /* "dnet.pyx":509 + * if PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsLong(value)) + * elif PyLong_Check(value): # <<<<<<<<<<<<<< + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + * elif PyBytes_Size(value) != IP_ADDR_LEN: + */ + goto __pyx_L3; } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":512 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type = __pyx_4; + /* "dnet.pyx":511 + * elif PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + * elif PyBytes_Size(value) != IP_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 4-byte string" + * else: + */ + __pyx_t_2 = __Pyx_PyInt_From_int(PyBytes_Size(__pyx_v_value)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 511, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_ADDR_LEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 511, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 511, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 511, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":512 + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + * elif PyBytes_Size(value) != IP_ADDR_LEN: + * raise ValueError, "not a 4-byte string" # <<<<<<<<<<<<<< + * else: + * __memcpy(self._addr.addr_data8, value, 4) + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_not_a_4_byte_string, 0, 0); + __PYX_ERR(0, 512, __pyx_L1_error) + + /* "dnet.pyx":511 + * elif PyLong_Check(value): + * self._addr.addr_ip = htonl(PyLong_AsUnsignedLong(value)) + * elif PyBytes_Size(value) != IP_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 4-byte string" + * else: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":513 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_BITS); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits = __pyx_4; + /* "dnet.pyx":514 + * raise ValueError, "not a 4-byte string" + * else: + * __memcpy(self._addr.addr_data8, value, 4) # <<<<<<<<<<<<<< + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS + */ + /*else*/ { + __pyx_t_4 = __pyx_f_4dnet___memcpy(__pyx_v_self->_addr.addr_data8, __pyx_v_value, 4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 514, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_L3:; + /* "dnet.pyx":515 + * else: + * __memcpy(self._addr.addr_data8, value, 4) + * self._addr.addr_type = ADDR_TYPE_IP # <<<<<<<<<<<<<< + * self._addr.addr_bits = IP_ADDR_BITS + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_self->_addr.addr_type = __pyx_t_5; + + /* "dnet.pyx":516 + * __memcpy(self._addr.addr_data8, value, 4) + * self._addr.addr_type = ADDR_TYPE_IP + * self._addr.addr_bits = IP_ADDR_BITS # <<<<<<<<<<<<<< + * + * property ip6: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_IP_ADDR_BITS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_4); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_self->_addr.addr_bits = __pyx_t_5; + + /* "dnet.pyx":505 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 4) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * # XXX - handle < 2.3, or else we'd use PyLong_AsUnsignedLongMask() + * if PyLong_Check(value): + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.addr.ip.__set__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.addr.ip.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_value); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k70p; - -static char (__pyx_k70[]) = "non-IPv6 address"; - -static PyObject *__pyx_f_4dnet_4addr_3ip6___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr_3ip6___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":518 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { +/* "dnet.pyx":520 + * property ip6: + * """IPv6 address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP6: + * raise ValueError, "non-IPv6 address" + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_3ip6_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_3ip6_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_3ip6___get__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":519 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_k70p, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 519; goto __pyx_L1;} - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_4addr_3ip6___get__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":521 + * """IPv6 address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP6: # <<<<<<<<<<<<<< + * raise ValueError, "non-IPv6 address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":522 + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP6: + * raise ValueError, "non-IPv6 address" # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) + * + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_non_IPv6_address, 0, 0); + __PYX_ERR(0, 522, __pyx_L1_error) + + /* "dnet.pyx":521 + * """IPv6 address as binary string.""" + * def __get__(self): + * if self._addr.addr_type != ADDR_TYPE_IP6: # <<<<<<<<<<<<<< + * raise ValueError, "non-IPv6 address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":520 */ - __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + /* "dnet.pyx":523 + * if self._addr.addr_type != ADDR_TYPE_IP6: + * raise ValueError, "non-IPv6 address" + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) # <<<<<<<<<<<<<< + * + * def __set__(self, value): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(__pyx_v_self->_addr.addr_data8, 16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 523, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.ip6.__get__"); - __pyx_r = 0; + /* "dnet.pyx":520 + * property ip6: + * """IPv6 address as binary string.""" + * def __get__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP6: + * raise ValueError, "non-IPv6 address" + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.ip6.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k71p; +/* "dnet.pyx":525 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * if PyBytes_Size(value) != IP6_ADDR_LEN: + * raise ValueError, "not a 16-byte string" + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_3ip6_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ +static int __pyx_pw_4dnet_4addr_3ip6_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_3ip6_2__set__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((PyObject *)__pyx_v_value)); -static char (__pyx_k71[]) = "not a 16-byte string"; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static int __pyx_f_4dnet_4addr_3ip6___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_f_4dnet_4addr_3ip6___set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) { +static int __pyx_pf_4dnet_4addr_3ip6_2__set__(struct __pyx_obj_4dnet_addr *__pyx_v_self, PyObject *__pyx_v_value) { int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - unsigned short __pyx_4; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_value); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":523 */ - __pyx_1 = PyLong_FromLong(PyBytes_Size(__pyx_v_value)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_ADDR_LEN); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":524 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_k71p, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 524; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":525 */ - __pyx_2 = __pyx_f_4dnet___memcpy(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8,__pyx_v_value,16); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":526 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":527 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_ADDR_BITS); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits = __pyx_4; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + unsigned short __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__set__", 0); + + /* "dnet.pyx":526 + * + * def __set__(self, value): + * if PyBytes_Size(value) != IP6_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 16-byte string" + * __memcpy(self._addr.addr_data8, value, 16) + */ + __pyx_t_1 = __Pyx_PyInt_From_int(PyBytes_Size(__pyx_v_value)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_IP6_ADDR_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 526, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 526, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":527 + * def __set__(self, value): + * if PyBytes_Size(value) != IP6_ADDR_LEN: + * raise ValueError, "not a 16-byte string" # <<<<<<<<<<<<<< + * __memcpy(self._addr.addr_data8, value, 16) + * self._addr.addr_type = ADDR_TYPE_IP6 + */ + __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_not_a_16_byte_string, 0, 0); + __PYX_ERR(0, 527, __pyx_L1_error) + + /* "dnet.pyx":526 + * + * def __set__(self, value): + * if PyBytes_Size(value) != IP6_ADDR_LEN: # <<<<<<<<<<<<<< + * raise ValueError, "not a 16-byte string" + * __memcpy(self._addr.addr_data8, value, 16) + */ + } + /* "dnet.pyx":528 + * if PyBytes_Size(value) != IP6_ADDR_LEN: + * raise ValueError, "not a 16-byte string" + * __memcpy(self._addr.addr_data8, value, 16) # <<<<<<<<<<<<<< + * self._addr.addr_type = ADDR_TYPE_IP6 + * self._addr.addr_bits = IP6_ADDR_BITS + */ + __pyx_t_3 = __pyx_f_4dnet___memcpy(__pyx_v_self->_addr.addr_data8, __pyx_v_value, 16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 528, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":529 + * raise ValueError, "not a 16-byte string" + * __memcpy(self._addr.addr_data8, value, 16) + * self._addr.addr_type = ADDR_TYPE_IP6 # <<<<<<<<<<<<<< + * self._addr.addr_bits = IP6_ADDR_BITS + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_IP6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 529, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_self->_addr.addr_type = __pyx_t_5; + + /* "dnet.pyx":530 + * __memcpy(self._addr.addr_data8, value, 16) + * self._addr.addr_type = ADDR_TYPE_IP6 + * self._addr.addr_bits = IP6_ADDR_BITS # <<<<<<<<<<<<<< + * + * def bcast(self): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP6_ADDR_BITS); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_self->_addr.addr_bits = __pyx_t_5; + + /* "dnet.pyx":525 + * return PyBytes_FromStringAndSize(self._addr.addr_data8, 16) + * + * def __set__(self, value): # <<<<<<<<<<<<<< + * if PyBytes_Size(value) != IP6_ADDR_LEN: + * raise ValueError, "not a 16-byte string" + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.ip6.__set__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.ip6.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_value); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4addr_bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4addr_bcast[] = "Return an addr object for our broadcast address."; -static PyObject *__pyx_f_4dnet_4addr_bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_bcast; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); - __pyx_v_bcast = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":531 */ - __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; goto __pyx_L1;} - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_v_bcast); - __pyx_v_bcast = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":532 */ - addr_bcast((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&((struct __pyx_obj_4dnet_addr *)__pyx_v_bcast)->_addr)); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":533 */ - Py_INCREF(__pyx_v_bcast); - __pyx_r = __pyx_v_bcast; - goto __pyx_L0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":532 + * self._addr.addr_bits = IP6_ADDR_BITS + * + * def bcast(self): # <<<<<<<<<<<<<< + * """Return an addr object for our broadcast address.""" + * bcast = addr() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_3bcast(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_4addr_2bcast[] = "Return an addr object for our broadcast address."; +static PyObject *__pyx_pw_4dnet_4addr_3bcast(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("bcast (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_2bcast(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_4addr_2bcast(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + struct __pyx_obj_4dnet_addr *__pyx_v_bcast = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("bcast", 0); + + /* "dnet.pyx":534 + * def bcast(self): + * """Return an addr object for our broadcast address.""" + * bcast = addr() # <<<<<<<<<<<<<< + * addr_bcast(&self._addr, &(bcast)._addr) + * return bcast + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_bcast = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":535 + * """Return an addr object for our broadcast address.""" + * bcast = addr() + * addr_bcast(&self._addr, &(bcast)._addr) # <<<<<<<<<<<<<< + * return bcast + * + */ + (void)(addr_bcast((&__pyx_v_self->_addr), (&__pyx_v_bcast->_addr))); + + /* "dnet.pyx":536 + * bcast = addr() + * addr_bcast(&self._addr, &(bcast)._addr) + * return bcast # <<<<<<<<<<<<<< + * + * def net(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_bcast)); + __pyx_r = ((PyObject *)__pyx_v_bcast); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.bcast"); - __pyx_r = 0; + + /* "dnet.pyx":532 + * self._addr.addr_bits = IP6_ADDR_BITS + * + * def bcast(self): # <<<<<<<<<<<<<< + * """Return an addr object for our broadcast address.""" + * bcast = addr() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.bcast", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_bcast); - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4addr_net(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4addr_net[] = "Return an addr object for our network address."; -static PyObject *__pyx_f_4dnet_4addr_net(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_net; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); - __pyx_v_net = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":537 */ - __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;} - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_v_net); - __pyx_v_net = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":538 */ - addr_net((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&((struct __pyx_obj_4dnet_addr *)__pyx_v_net)->_addr)); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":539 */ - Py_INCREF(__pyx_v_net); - __pyx_r = __pyx_v_net; - goto __pyx_L0; + __Pyx_XDECREF((PyObject *)__pyx_v_bcast); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":538 + * return bcast + * + * def net(self): # <<<<<<<<<<<<<< + * """Return an addr object for our network address.""" + * net = addr() + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_5net(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_4addr_4net[] = "Return an addr object for our network address."; +static PyObject *__pyx_pw_4dnet_4addr_5net(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("net (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_4net(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_4addr_4net(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + struct __pyx_obj_4dnet_addr *__pyx_v_net = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("net", 0); + + /* "dnet.pyx":540 + * def net(self): + * """Return an addr object for our network address.""" + * net = addr() # <<<<<<<<<<<<<< + * addr_net(&self._addr, &(net)._addr) + * return net + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_net = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":541 + * """Return an addr object for our network address.""" + * net = addr() + * addr_net(&self._addr, &(net)._addr) # <<<<<<<<<<<<<< + * return net + * + */ + (void)(addr_net((&__pyx_v_self->_addr), (&__pyx_v_net->_addr))); + + /* "dnet.pyx":542 + * net = addr() + * addr_net(&self._addr, &(net)._addr) + * return net # <<<<<<<<<<<<<< + * + * def __add__(self, other): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_net)); + __pyx_r = ((PyObject *)__pyx_v_net); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.net"); - __pyx_r = 0; + + /* "dnet.pyx":538 + * return bcast + * + * def net(self): # <<<<<<<<<<<<<< + * """Return an addr object for our network address.""" + * net = addr() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.net", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_net); - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_n_NotImplementedError; -static PyObject *__pyx_n___copy__; - -static PyObject *__pyx_f_4dnet_4addr___add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) { - PyObject *__pyx_v_x; - PyObject *__pyx_v_y; - PyObject *__pyx_v_z; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - unsigned long __pyx_5; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_other); - __pyx_v_x = Py_None; Py_INCREF(Py_None); - __pyx_v_y = Py_None; Py_INCREF(Py_None); - __pyx_v_z = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":543 */ - __pyx_1 = PyLong_Check(__pyx_v_self); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":544 */ - __pyx_2 = __pyx_v_other; - Py_INCREF(__pyx_2); - __pyx_3 = __pyx_v_self; - Py_INCREF(__pyx_3); - Py_DECREF(__pyx_v_x); - __pyx_v_x = __pyx_2; - __pyx_2 = 0; - Py_DECREF(__pyx_v_y); - __pyx_v_y = __pyx_3; - __pyx_3 = 0; - goto __pyx_L2; - } - __pyx_1 = PyLong_Check(__pyx_v_other); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":546 */ - __pyx_2 = __pyx_v_self; - Py_INCREF(__pyx_2); - __pyx_3 = __pyx_v_other; - Py_INCREF(__pyx_3); - Py_DECREF(__pyx_v_x); - __pyx_v_x = __pyx_2; - __pyx_2 = 0; - Py_DECREF(__pyx_v_y); - __pyx_v_y = __pyx_3; - __pyx_3 = 0; - goto __pyx_L2; + __Pyx_XDECREF((PyObject *)__pyx_v_net); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":544 + * return net + * + * def __add__(self, other): # <<<<<<<<<<<<<< + * # XXX - only handle IP for now... + * if PyLong_Check(self): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_7__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_7__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__add__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_6__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_6__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) { + PyObject *__pyx_v_x = NULL; + PyObject *__pyx_v_y = NULL; + PyObject *__pyx_v_z = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + unsigned long __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__add__", 0); + + /* "dnet.pyx":546 + * def __add__(self, other): + * # XXX - only handle IP for now... + * if PyLong_Check(self): # <<<<<<<<<<<<<< + * x, y = other, self + * elif PyLong_Check(other): + */ + __pyx_t_1 = (PyLong_Check(__pyx_v_self) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":547 + * # XXX - only handle IP for now... + * if PyLong_Check(self): + * x, y = other, self # <<<<<<<<<<<<<< + * elif PyLong_Check(other): + * x, y = self, other + */ + __pyx_t_2 = __pyx_v_other; + __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = __pyx_v_self; + __Pyx_INCREF(__pyx_t_3); + __pyx_v_x = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_y = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":546 + * def __add__(self, other): + * # XXX - only handle IP for now... + * if PyLong_Check(self): # <<<<<<<<<<<<<< + * x, y = other, self + * elif PyLong_Check(other): + */ + goto __pyx_L3; + } + + /* "dnet.pyx":548 + * if PyLong_Check(self): + * x, y = other, self + * elif PyLong_Check(other): # <<<<<<<<<<<<<< + * x, y = self, other + * else: + */ + __pyx_t_1 = (PyLong_Check(__pyx_v_other) != 0); + if (likely(__pyx_t_1)) { + + /* "dnet.pyx":549 + * x, y = other, self + * elif PyLong_Check(other): + * x, y = self, other # <<<<<<<<<<<<<< + * else: + * raise NotImplementedError + */ + __pyx_t_3 = __pyx_v_self; + __Pyx_INCREF(__pyx_t_3); + __pyx_t_2 = __pyx_v_other; + __Pyx_INCREF(__pyx_t_2); + __pyx_v_x = __pyx_t_3; + __pyx_t_3 = 0; + __pyx_v_y = __pyx_t_2; + __pyx_t_2 = 0; + + /* "dnet.pyx":548 + * if PyLong_Check(self): + * x, y = other, self + * elif PyLong_Check(other): # <<<<<<<<<<<<<< + * x, y = self, other + * else: + */ + goto __pyx_L3; } + + /* "dnet.pyx":551 + * x, y = self, other + * else: + * raise NotImplementedError # <<<<<<<<<<<<<< + * z = x.__copy__() + * (z)._addr.addr_ip = htonl(ntohl((x)._addr.addr_ip) + y) + */ /*else*/ { + __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); + __PYX_ERR(0, 551, __pyx_L1_error) + } + __pyx_L3:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":548 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_NotImplementedError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; goto __pyx_L1;} - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":549 */ - __pyx_3 = PyObject_GetAttr(__pyx_v_x, __pyx_n___copy__); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} - __pyx_4 = PyObject_Call(__pyx_3, __pyx_2, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 549; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_v_z); - __pyx_v_z = __pyx_4; - __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":550 */ - __pyx_3 = PyLong_FromUnsignedLong(ntohl(((struct __pyx_obj_4dnet_addr *)__pyx_v_x)->_addr.addr_ip)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;} - __pyx_2 = PyNumber_Add(__pyx_3, __pyx_v_y); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_5 = PyLong_AsUnsignedLongMask(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - ((struct __pyx_obj_4dnet_addr *)__pyx_v_z)->_addr.addr_ip = htonl(__pyx_5); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":551 */ - Py_INCREF(__pyx_v_z); + /* "dnet.pyx":552 + * else: + * raise NotImplementedError + * z = x.__copy__() # <<<<<<<<<<<<<< + * (z)._addr.addr_ip = htonl(ntohl((x)._addr.addr_ip) + y) + * return z + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_z = __pyx_t_2; + __pyx_t_2 = 0; + + /* "dnet.pyx":553 + * raise NotImplementedError + * z = x.__copy__() + * (z)._addr.addr_ip = htonl(ntohl((x)._addr.addr_ip) + y) # <<<<<<<<<<<<<< + * return z + * + */ + __pyx_t_2 = __Pyx_PyInt_From_unsigned_long(ntohl(((struct __pyx_obj_4dnet_addr *)__pyx_v_x)->_addr.addr_ip)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 553, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyInt_As_unsigned_long(__pyx_t_3); if (unlikely((__pyx_t_5 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 553, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + ((struct __pyx_obj_4dnet_addr *)__pyx_v_z)->_addr.addr_ip = htonl(__pyx_t_5); + + /* "dnet.pyx":554 + * z = x.__copy__() + * (z)._addr.addr_ip = htonl(ntohl((x)._addr.addr_ip) + y) + * return z # <<<<<<<<<<<<<< + * + * def __copy__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_z); __pyx_r = __pyx_v_z; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":544 + * return net + * + * def __add__(self, other): # <<<<<<<<<<<<<< + * # XXX - only handle IP for now... + * if PyLong_Check(self): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.addr.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_x); + __Pyx_XDECREF(__pyx_v_y); + __Pyx_XDECREF(__pyx_v_z); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":556 + * return z + * + * def __copy__(self): # <<<<<<<<<<<<<< + * a = addr() + * (a)._addr = self._addr + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_9__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_9__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_8__copy__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_8__copy__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + struct __pyx_obj_4dnet_addr *__pyx_v_a = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + struct addr __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__copy__", 0); + + /* "dnet.pyx":557 + * + * def __copy__(self): + * a = addr() # <<<<<<<<<<<<<< + * (a)._addr = self._addr + * return a + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_a = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":558 + * def __copy__(self): + * a = addr() + * (a)._addr = self._addr # <<<<<<<<<<<<<< + * return a + * + */ + __pyx_t_2 = __pyx_v_self->_addr; + __pyx_v_a->_addr = __pyx_t_2; + + /* "dnet.pyx":559 + * a = addr() + * (a)._addr = self._addr + * return a # <<<<<<<<<<<<<< + * + * def __eq__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_a)); + __pyx_r = ((PyObject *)__pyx_v_a); + goto __pyx_L0; + + /* "dnet.pyx":556 + * return z + * + * def __copy__(self): # <<<<<<<<<<<<<< + * a = addr() + * (a)._addr = self._addr + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_a); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":561 + * return a + * + * def __eq__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == 0 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_11__eq__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_11__eq__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 561, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_10__eq__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.addr.__add__"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_x); - Py_DECREF(__pyx_v_y); - Py_DECREF(__pyx_v_z); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_other); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4addr___copy__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___copy__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_a; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); - __pyx_v_a = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":554 */ - __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; goto __pyx_L1;} - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 554; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_v_a); - __pyx_v_a = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":555 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_a)->_addr = ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":556 */ - Py_INCREF(__pyx_v_a); - __pyx_r = __pyx_v_a; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_10__eq__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__eq__", 0); + + /* "dnet.pyx":562 + * + * def __eq__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) == 0 # <<<<<<<<<<<<<< + * + * def __ne__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) == 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":561 + * return a + * + * def __eq__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == 0 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":564 + * return addr_cmp(&x._addr, &y._addr) == 0 + * + * def __ne__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != 0 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_13__ne__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_13__ne__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 564, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_12__ne__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.__copy__"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_4addr___cmp__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ -static int __pyx_f_4dnet_4addr___cmp__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { - int __pyx_v_i; - int __pyx_r; - int __pyx_1; - Py_INCREF(__pyx_v_x); - Py_INCREF(__pyx_v_y); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; goto __pyx_L1;} +static PyObject *__pyx_pf_4dnet_4addr_12__ne__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__ne__", 0); + + /* "dnet.pyx":565 + * + * def __ne__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) != 0 # <<<<<<<<<<<<<< + * + * def __lt__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":560 */ - __pyx_v_i = addr_cmp((&((struct __pyx_obj_4dnet_addr *)__pyx_v_x)->_addr),(&((struct __pyx_obj_4dnet_addr *)__pyx_v_y)->_addr)); + /* "dnet.pyx":564 + * return addr_cmp(&x._addr, &y._addr) == 0 + * + * def __ne__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != 0 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":561 */ - __pyx_1 = (__pyx_v_i < 0); - if (__pyx_1) { +/* "dnet.pyx":567 + * return addr_cmp(&x._addr, &y._addr) != 0 + * + * def __lt__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == -1 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_15__lt__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_15__lt__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__lt__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_14__lt__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":562 */ - __pyx_r = (-1); - goto __pyx_L0; - goto __pyx_L2; - } - __pyx_L2:; +static PyObject *__pyx_pf_4dnet_4addr_14__lt__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__lt__", 0); + + /* "dnet.pyx":568 + * + * def __lt__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) == -1 # <<<<<<<<<<<<<< + * + * def __gt__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) == -1L)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":563 */ - __pyx_1 = (__pyx_v_i > 0); - if (__pyx_1) { + /* "dnet.pyx":567 + * return addr_cmp(&x._addr, &y._addr) != 0 + * + * def __lt__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == -1 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__lt__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":564 */ - __pyx_r = 1; - goto __pyx_L0; - goto __pyx_L3; - } - __pyx_L3:; +/* "dnet.pyx":570 + * return addr_cmp(&x._addr, &y._addr) == -1 + * + * def __gt__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == 1 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_17__gt__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_17__gt__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__gt__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 570, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_16__gt__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":565 */ - __pyx_r = 0; +static PyObject *__pyx_pf_4dnet_4addr_16__gt__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__gt__", 0); + + /* "dnet.pyx":571 + * + * def __gt__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) == 1 # <<<<<<<<<<<<<< + * + * def __le__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) == 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 571, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = 0; + /* "dnet.pyx":570 + * return addr_cmp(&x._addr, &y._addr) == -1 + * + * def __gt__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) == 1 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__gt__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":573 + * return addr_cmp(&x._addr, &y._addr) == 1 + * + * def __le__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != 1 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_19__le__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_19__le__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__le__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 573, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_18__le__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_18__le__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__le__", 0); + + /* "dnet.pyx":574 + * + * def __le__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) != 1 # <<<<<<<<<<<<<< + * + * def __ge__(addr x, addr y): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) != 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":573 + * return addr_cmp(&x._addr, &y._addr) == 1 + * + * def __le__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != 1 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__le__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":576 + * return addr_cmp(&x._addr, &y._addr) != 1 + * + * def __ge__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != -1 + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_21__ge__(PyObject *__pyx_v_x, PyObject *__pyx_v_y); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_21__ge__(PyObject *__pyx_v_x, PyObject *__pyx_v_y) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__ge__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_4dnet_addr, 1, "y", 0))) __PYX_ERR(0, 576, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_20__ge__(((struct __pyx_obj_4dnet_addr *)__pyx_v_x), ((struct __pyx_obj_4dnet_addr *)__pyx_v_y)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_20__ge__(struct __pyx_obj_4dnet_addr *__pyx_v_x, struct __pyx_obj_4dnet_addr *__pyx_v_y) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__ge__", 0); + + /* "dnet.pyx":577 + * + * def __ge__(addr x, addr y): + * return addr_cmp(&x._addr, &y._addr) != -1 # <<<<<<<<<<<<<< + * + * def __contains__(self, addr other): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyBool_FromLong((addr_cmp((&__pyx_v_x->_addr), (&__pyx_v_y->_addr)) != -1L)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":576 + * return addr_cmp(&x._addr, &y._addr) != 1 + * + * def __ge__(addr x, addr y): # <<<<<<<<<<<<<< + * return addr_cmp(&x._addr, &y._addr) != -1 + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__ge__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":579 + * return addr_cmp(&x._addr, &y._addr) != -1 + * + * def __contains__(self, addr other): # <<<<<<<<<<<<<< + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4addr_23__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/ +static int __pyx_pw_4dnet_4addr_23__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_4dnet_addr, 1, "other", 0))) __PYX_ERR(0, 579, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4addr_22__contains__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_other)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.addr.__cmp__"); + __pyx_L1_error:; __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_x); - Py_DECREF(__pyx_v_y); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_4addr___contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/ -static int __pyx_f_4dnet_4addr___contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) { +static int __pyx_pf_4dnet_4addr_22__contains__(struct __pyx_obj_4dnet_addr *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_other) { struct addr __pyx_v_s1; struct addr __pyx_v_s2; struct addr __pyx_v_o1; struct addr __pyx_v_o2; int __pyx_r; - int __pyx_1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_other); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_4dnet_addr, 1, "other")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":569 */ - __pyx_1 = (addr_net((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&__pyx_v_s1)) != 0); - if (!__pyx_1) { - __pyx_1 = (addr_bcast((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&__pyx_v_s2)) != 0); - if (!__pyx_1) { - __pyx_1 = (addr_net((&((struct __pyx_obj_4dnet_addr *)__pyx_v_other)->_addr),(&__pyx_v_o1)) != 0); - if (!__pyx_1) { - __pyx_1 = (addr_bcast((&((struct __pyx_obj_4dnet_addr *)__pyx_v_other)->_addr),(&__pyx_v_o2)) != 0); - } - } + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + __Pyx_RefNannySetupContext("__contains__", 0); + + /* "dnet.pyx":581 + * def __contains__(self, addr other): + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ # <<<<<<<<<<<<<< + * addr_bcast(&self._addr, &s2) != 0 or \ + * addr_net(&other._addr, &o1) != 0 or \ + */ + __pyx_t_2 = ((addr_net((&__pyx_v_self->_addr), (&__pyx_v_s1)) != 0) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + + /* "dnet.pyx":582 + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ + * addr_bcast(&self._addr, &s2) != 0 or \ # <<<<<<<<<<<<<< + * addr_net(&other._addr, &o1) != 0 or \ + * addr_bcast(&other._addr, &o2) != 0: + */ + __pyx_t_2 = ((addr_bcast((&__pyx_v_self->_addr), (&__pyx_v_s2)) != 0) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; } - if (__pyx_1) { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":573 */ + /* "dnet.pyx":583 + * if addr_net(&self._addr, &s1) != 0 or \ + * addr_bcast(&self._addr, &s2) != 0 or \ + * addr_net(&other._addr, &o1) != 0 or \ # <<<<<<<<<<<<<< + * addr_bcast(&other._addr, &o2) != 0: + * return 0 + */ + __pyx_t_2 = ((addr_net((&__pyx_v_other->_addr), (&__pyx_v_o1)) != 0) != 0); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L4_bool_binop_done; + } + + /* "dnet.pyx":584 + * addr_bcast(&self._addr, &s2) != 0 or \ + * addr_net(&other._addr, &o1) != 0 or \ + * addr_bcast(&other._addr, &o2) != 0: # <<<<<<<<<<<<<< + * return 0 + * return addr_cmp(&o1, &s1) >= 0 and addr_cmp(&o2, &s2) <= 0 + */ + __pyx_t_2 = ((addr_bcast((&__pyx_v_other->_addr), (&__pyx_v_o2)) != 0) != 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L4_bool_binop_done:; + + /* "dnet.pyx":581 + * def __contains__(self, addr other): + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ # <<<<<<<<<<<<<< + * addr_bcast(&self._addr, &s2) != 0 or \ + * addr_net(&other._addr, &o1) != 0 or \ + */ + if (__pyx_t_1) { + + /* "dnet.pyx":585 + * addr_net(&other._addr, &o1) != 0 or \ + * addr_bcast(&other._addr, &o2) != 0: + * return 0 # <<<<<<<<<<<<<< + * return addr_cmp(&o1, &s1) >= 0 and addr_cmp(&o2, &s2) <= 0 + * + */ __pyx_r = 0; goto __pyx_L0; - goto __pyx_L2; + + /* "dnet.pyx":581 + * def __contains__(self, addr other): + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ # <<<<<<<<<<<<<< + * addr_bcast(&self._addr, &s2) != 0 or \ + * addr_net(&other._addr, &o1) != 0 or \ + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":574 */ - __pyx_1 = (addr_cmp((&__pyx_v_o1),(&__pyx_v_s1)) >= 0); - if (__pyx_1) { - __pyx_1 = (addr_cmp((&__pyx_v_o2),(&__pyx_v_s2)) <= 0); + /* "dnet.pyx":586 + * addr_bcast(&other._addr, &o2) != 0: + * return 0 + * return addr_cmp(&o1, &s1) >= 0 and addr_cmp(&o2, &s2) <= 0 # <<<<<<<<<<<<<< + * + * def __hash__(self): + */ + __pyx_t_1 = (addr_cmp((&__pyx_v_o1), (&__pyx_v_s1)) >= 0); + if (__pyx_t_1) { + } else { + __pyx_t_3 = __pyx_t_1; + goto __pyx_L8_bool_binop_done; } - __pyx_r = __pyx_1; + __pyx_t_1 = (addr_cmp((&__pyx_v_o2), (&__pyx_v_s2)) <= 0); + __pyx_t_3 = __pyx_t_1; + __pyx_L8_bool_binop_done:; + __pyx_r = __pyx_t_3; goto __pyx_L0; - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.addr.__contains__"); - __pyx_r = -1; + /* "dnet.pyx":579 + * return addr_cmp(&x._addr, &y._addr) != -1 + * + * def __contains__(self, addr other): # <<<<<<<<<<<<<< + * cdef addr_t s1, s2, o1, o2 + * if addr_net(&self._addr, &s1) != 0 or \ + */ + + /* function exit code */ __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_other); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":588 + * return addr_cmp(&o1, &s1) >= 0 and addr_cmp(&o2, &s2) <= 0 + * + * def __hash__(self): # <<<<<<<<<<<<<< + * cdef long x, y, size + * if self._addr.addr_type == ADDR_TYPE_ETH: size = 6 + */ + +/* Python wrapper */ +static Py_hash_t __pyx_pw_4dnet_4addr_25__hash__(PyObject *__pyx_v_self); /*proto*/ +static Py_hash_t __pyx_pw_4dnet_4addr_25__hash__(PyObject *__pyx_v_self) { + Py_hash_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_24__hash__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static long __pyx_f_4dnet_4addr___hash__(PyObject *__pyx_v_self); /*proto*/ -static long __pyx_f_4dnet_4addr___hash__(PyObject *__pyx_v_self) { +static Py_hash_t __pyx_pf_4dnet_4addr_24__hash__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { long __pyx_v_x; long __pyx_v_y; long __pyx_v_size; - PyObject *__pyx_v_i; - long __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - long __pyx_4; - Py_ssize_t __pyx_5; - Py_INCREF(__pyx_v_self); - __pyx_v_i = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":578 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_ETH); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { + long __pyx_v_i; + Py_hash_t __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + long __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__hash__", 0); + + /* "dnet.pyx":590 + * def __hash__(self): + * cdef long x, y, size + * if self._addr.addr_type == ADDR_TYPE_ETH: size = 6 # <<<<<<<<<<<<<< + * elif self._addr.addr_type == ADDR_TYPE_IP: size = 4 + * elif self._addr.addr_type == ADDR_TYPE_IP6: size = 16 + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_ETH); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 590, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { __pyx_v_size = 6; - goto __pyx_L2; - } - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - __pyx_v_size = 4; - goto __pyx_L2; - } - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - __pyx_v_size = 16; - goto __pyx_L2; + goto __pyx_L3; } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":581 */ - __pyx_v_x = 3430008; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":582 */ - __pyx_v_x = (__pyx_v_x ^ ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":583 */ - __pyx_v_x = (__pyx_v_x ^ ((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_bits); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":584 */ - __pyx_v_y = ((((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8[0]) << 7); + /* "dnet.pyx":591 + * cdef long x, y, size + * if self._addr.addr_type == ADDR_TYPE_ETH: size = 6 + * elif self._addr.addr_type == ADDR_TYPE_IP: size = 4 # <<<<<<<<<<<<<< + * elif self._addr.addr_type == ADDR_TYPE_IP6: size = 16 + * x = 0x345678 + */ + __pyx_t_3 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 591, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 591, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_4) { + __pyx_v_size = 4; + goto __pyx_L3; + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":585 */ - for (__pyx_4 = 0+1; __pyx_4 < __pyx_v_size; ++__pyx_4) { - __pyx_1 = PyLong_FromLong(__pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_1; - __pyx_1 = 0; + /* "dnet.pyx":592 + * if self._addr.addr_type == ADDR_TYPE_ETH: size = 6 + * elif self._addr.addr_type == ADDR_TYPE_IP: size = 4 + * elif self._addr.addr_type == ADDR_TYPE_IP6: size = 16 # <<<<<<<<<<<<<< + * x = 0x345678 + * x = x ^ self._addr.addr_type + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 592, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 592, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 592, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 592, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + __pyx_v_size = 16; + } + __pyx_L3:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":586 */ - __pyx_5 = PyLong_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; goto __pyx_L1;} - __pyx_v_y = ((1000003 * __pyx_v_y) ^ (((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_data8[__pyx_5])); - __pyx_L3:; + /* "dnet.pyx":593 + * elif self._addr.addr_type == ADDR_TYPE_IP: size = 4 + * elif self._addr.addr_type == ADDR_TYPE_IP6: size = 16 + * x = 0x345678 # <<<<<<<<<<<<<< + * x = x ^ self._addr.addr_type + * x = x ^ self._addr.addr_bits + */ + __pyx_v_x = 0x345678; + + /* "dnet.pyx":594 + * elif self._addr.addr_type == ADDR_TYPE_IP6: size = 16 + * x = 0x345678 + * x = x ^ self._addr.addr_type # <<<<<<<<<<<<<< + * x = x ^ self._addr.addr_bits + * y = self._addr.addr_data8[0] << 7 + */ + __pyx_v_x = (__pyx_v_x ^ __pyx_v_self->_addr.addr_type); + + /* "dnet.pyx":595 + * x = 0x345678 + * x = x ^ self._addr.addr_type + * x = x ^ self._addr.addr_bits # <<<<<<<<<<<<<< + * y = self._addr.addr_data8[0] << 7 + * for i from 0 < i < size: + */ + __pyx_v_x = (__pyx_v_x ^ __pyx_v_self->_addr.addr_bits); + + /* "dnet.pyx":596 + * x = x ^ self._addr.addr_type + * x = x ^ self._addr.addr_bits + * y = self._addr.addr_data8[0] << 7 # <<<<<<<<<<<<<< + * for i from 0 < i < size: + * y = (1000003 * y) ^ self._addr.addr_data8[i] + */ + __pyx_v_y = ((__pyx_v_self->_addr.addr_data8[0]) << 7); + + /* "dnet.pyx":597 + * x = x ^ self._addr.addr_bits + * y = self._addr.addr_data8[0] << 7 + * for i from 0 < i < size: # <<<<<<<<<<<<<< + * y = (1000003 * y) ^ self._addr.addr_data8[i] + * y = y ^ size + */ + __pyx_t_5 = __pyx_v_size; + for (__pyx_v_i = 0+1; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { + + /* "dnet.pyx":598 + * y = self._addr.addr_data8[0] << 7 + * for i from 0 < i < size: + * y = (1000003 * y) ^ self._addr.addr_data8[i] # <<<<<<<<<<<<<< + * y = y ^ size + * if y == -1: y = -2 + */ + __pyx_v_y = ((0xF4243 * __pyx_v_y) ^ (__pyx_v_self->_addr.addr_data8[__pyx_v_i])); } - __pyx_L4:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":587 */ + /* "dnet.pyx":599 + * for i from 0 < i < size: + * y = (1000003 * y) ^ self._addr.addr_data8[i] + * y = y ^ size # <<<<<<<<<<<<<< + * if y == -1: y = -2 + * x = x ^ y + */ __pyx_v_y = (__pyx_v_y ^ __pyx_v_size); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":588 */ - __pyx_3 = (__pyx_v_y == (-1)); - if (__pyx_3) { - __pyx_v_y = (-2); - goto __pyx_L5; + /* "dnet.pyx":600 + * y = (1000003 * y) ^ self._addr.addr_data8[i] + * y = y ^ size + * if y == -1: y = -2 # <<<<<<<<<<<<<< + * x = x ^ y + * if x == -1: x = -2 + */ + __pyx_t_4 = ((__pyx_v_y == -1L) != 0); + if (__pyx_t_4) { + __pyx_v_y = -2L; } - __pyx_L5:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":589 */ + /* "dnet.pyx":601 + * y = y ^ size + * if y == -1: y = -2 + * x = x ^ y # <<<<<<<<<<<<<< + * if x == -1: x = -2 + * return x + */ __pyx_v_x = (__pyx_v_x ^ __pyx_v_y); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":590 */ - __pyx_3 = (__pyx_v_x == (-1)); - if (__pyx_3) { - __pyx_v_x = (-2); - goto __pyx_L6; + /* "dnet.pyx":602 + * if y == -1: y = -2 + * x = x ^ y + * if x == -1: x = -2 # <<<<<<<<<<<<<< + * return x + * + */ + __pyx_t_4 = ((__pyx_v_x == -1L) != 0); + if (__pyx_t_4) { + __pyx_v_x = -2L; } - __pyx_L6:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":591 */ + /* "dnet.pyx":603 + * x = x ^ y + * if x == -1: x = -2 + * return x # <<<<<<<<<<<<<< + * + * def __int__(self): + */ __pyx_r = __pyx_v_x; goto __pyx_L0; - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.__hash__"); + /* "dnet.pyx":588 + * return addr_cmp(&o1, &s1) >= 0 and addr_cmp(&o2, &s2) <= 0 + * + * def __hash__(self): # <<<<<<<<<<<<<< + * cdef long x, y, size + * if self._addr.addr_type == ADDR_TYPE_ETH: size = 6 + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.__hash__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_i); - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4addr___int__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___int__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":594 */ - __pyx_1 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;} - if (__pyx_3=PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":595 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_NotImplementedError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, 0, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":596 */ - __pyx_2 = PyLong_FromUnsignedLong(ntohl(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_ip)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.__int__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); + if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2; + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_n___int__; +/* "dnet.pyx":605 + * return x + * + * def __int__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise NotImplementedError + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_27__int__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_27__int__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__int__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_26__int__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_f_4dnet_4addr___long__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___long__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_4addr_26__int__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__int__", 0); + + /* "dnet.pyx":606 + * + * def __int__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * raise NotImplementedError + * return ntohl(self._addr.addr_ip) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 606, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(__pyx_t_4)) { + + /* "dnet.pyx":607 + * def __int__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise NotImplementedError # <<<<<<<<<<<<<< + * return ntohl(self._addr.addr_ip) + * + */ + __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0); + __PYX_ERR(0, 607, __pyx_L1_error) + + /* "dnet.pyx":606 + * + * def __int__(self): + * if self._addr.addr_type != ADDR_TYPE_IP: # <<<<<<<<<<<<<< + * raise NotImplementedError + * return ntohl(self._addr.addr_ip) + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":599 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n___int__); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;} - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;} - __pyx_3 = PyObject_Call(__pyx_1, __pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_r = __pyx_3; - __pyx_3 = 0; + /* "dnet.pyx":608 + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise NotImplementedError + * return ntohl(self._addr.addr_ip) # <<<<<<<<<<<<<< + * + * def __long__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyInt_From_unsigned_long(ntohl(__pyx_v_self->_addr.addr_ip)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.addr.__long__"); - __pyx_r = 0; + /* "dnet.pyx":605 + * return x + * + * def __int__(self): # <<<<<<<<<<<<<< + * if self._addr.addr_type != ADDR_TYPE_IP: + * raise NotImplementedError + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4addr___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___iter__(PyObject *__pyx_v_self) { - struct addr __pyx_v_a; - struct addr __pyx_v_b; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":603 */ - __pyx_2 = PyLong_FromLong(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr.addr_type); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;} - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;} - if (__pyx_1 = PyObject_RichCompareBool(__pyx_2, __pyx_3,Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; goto __pyx_L1;} - __pyx_1 = __pyx_1 != 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - if (!__pyx_1) { - __pyx_1 = (addr_net((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&__pyx_v_a)) != 0); - if (!__pyx_1) { - __pyx_1 = (addr_bcast((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr),(&__pyx_v_b)) != 0); - } - } - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":606 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_ValueError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":615 */ - __pyx_3 = PyLong_FromUnsignedLong(__pyx_v_a.addr_ip); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;} - __pyx_2 = PyLong_FromUnsignedLong(__pyx_v_b.addr_ip); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;} - __pyx_4 = PyTuple_New(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_4, 0, __pyx_3); - PyTuple_SET_ITEM(__pyx_4, 1, __pyx_2); - __pyx_3 = 0; - __pyx_2 = 0; - __pyx_3 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet___addr_ip4_iter), __pyx_4, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_r = __pyx_3; - __pyx_3 = 0; +/* "dnet.pyx":610 + * return ntohl(self._addr.addr_ip) + * + * def __long__(self): # <<<<<<<<<<<<<< + * return self.__int__() + * + */ + +/* Python wrapper */ +#if PY_MAJOR_VERSION < 3 +static PyObject *__pyx_pw_4dnet_4addr_29__long__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_29__long__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__long__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_28__long__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +#endif /*!(#if PY_MAJOR_VERSION < 3)*/ + +#if PY_MAJOR_VERSION < 3 +static PyObject *__pyx_pf_4dnet_4addr_28__long__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__long__", 0); + + /* "dnet.pyx":611 + * + * def __long__(self): + * return self.__int__() # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_int); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 611, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 611, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.addr.__iter__"); - __pyx_r = 0; + /* "dnet.pyx":610 + * return ntohl(self._addr.addr_ip) + * + * def __long__(self): # <<<<<<<<<<<<<< + * return self.__int__() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.addr.__long__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +#endif /*!(#if PY_MAJOR_VERSION < 3)*/ + +/* "dnet.pyx":613 + * return self.__int__() + * + * def __iter__(self): # <<<<<<<<<<<<<< + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_31__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_31__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_30__iter__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_k72p; - -static char (__pyx_k72[]) = ""; - -static PyObject *__pyx_f_4dnet_4addr___repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4addr___repr__(PyObject *__pyx_v_self) { - char (*__pyx_v_p); - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":619 */ - __pyx_v_p = addr_ntoa((&((struct __pyx_obj_4dnet_addr *)__pyx_v_self)->_addr)); +static PyObject *__pyx_pf_4dnet_4addr_30__iter__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + struct addr __pyx_v_a; + struct addr __pyx_v_b; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":615 + * def __iter__(self): + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ # <<<<<<<<<<<<<< + * addr_net(&self._addr, &a) != 0 or \ + * addr_bcast(&self._addr, &b) != 0: + */ + __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_self->_addr.addr_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 615, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 615, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + } else { + __pyx_t_1 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":620 */ - __pyx_1 = (!(__pyx_v_p != 0)); - if (__pyx_1) { + /* "dnet.pyx":616 + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ + * addr_net(&self._addr, &a) != 0 or \ # <<<<<<<<<<<<<< + * addr_bcast(&self._addr, &b) != 0: + * raise ValueError + */ + __pyx_t_5 = ((addr_net((&__pyx_v_self->_addr), (&__pyx_v_a)) != 0) != 0); + if (!__pyx_t_5) { + } else { + __pyx_t_1 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":621 */ - Py_INCREF(__pyx_k72p); - __pyx_r = __pyx_k72p; - goto __pyx_L0; - goto __pyx_L2; + /* "dnet.pyx":617 + * if self._addr.addr_type != ADDR_TYPE_IP or \ + * addr_net(&self._addr, &a) != 0 or \ + * addr_bcast(&self._addr, &b) != 0: # <<<<<<<<<<<<<< + * raise ValueError + * """XXX - i wish! + */ + __pyx_t_5 = ((addr_bcast((&__pyx_v_self->_addr), (&__pyx_v_b)) != 0) != 0); + __pyx_t_1 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + + /* "dnet.pyx":615 + * def __iter__(self): + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ # <<<<<<<<<<<<<< + * addr_net(&self._addr, &a) != 0 or \ + * addr_bcast(&self._addr, &b) != 0: + */ + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":618 + * addr_net(&self._addr, &a) != 0 or \ + * addr_bcast(&self._addr, &b) != 0: + * raise ValueError # <<<<<<<<<<<<<< + * """XXX - i wish! + * for i in ntohl(a.addr_ip) <= i <= ntohl(b.addr_ip): + */ + __Pyx_Raise(__pyx_builtin_ValueError, 0, 0, 0); + __PYX_ERR(0, 618, __pyx_L1_error) + + /* "dnet.pyx":615 + * def __iter__(self): + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ # <<<<<<<<<<<<<< + * addr_net(&self._addr, &a) != 0 or \ + * addr_bcast(&self._addr, &b) != 0: + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":622 */ - __pyx_2 = PyBytes_FromString(__pyx_v_p); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + /* "dnet.pyx":627 + * yield next + * """ + * return __addr_ip4_iter(a.addr_ip, b.addr_ip) # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyInt_From_unsigned_long(__pyx_v_a.addr_ip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyInt_From_unsigned_long(__pyx_v_b.addr_ip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4dnet___addr_ip4_iter), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.addr.__repr__"); - __pyx_r = 0; + /* "dnet.pyx":613 + * return self.__int__() + * + * def __iter__(self): # <<<<<<<<<<<<<< + * cdef addr_t a, b + * if self._addr.addr_type != ADDR_TYPE_IP or \ + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.addr.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_15__addr_ip4_iter___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_15__addr_ip4_iter___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_cur = 0; - PyObject *__pyx_v_max = 0; - int __pyx_r; - unsigned long __pyx_1; - static char *__pyx_argnames[] = {"cur","max",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_cur, &__pyx_v_max)) return -1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_cur); - Py_INCREF(__pyx_v_max); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":629 */ - __pyx_1 = PyLong_AsUnsignedLongMask(__pyx_v_cur); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; goto __pyx_L1;} - ((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur = ntohl(__pyx_1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":630 */ - __pyx_1 = PyLong_AsUnsignedLongMask(__pyx_v_max); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; goto __pyx_L1;} - ((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->max = ntohl(__pyx_1); +/* "dnet.pyx":629 + * return __addr_ip4_iter(a.addr_ip, b.addr_ip) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * cdef char *p + * p = addr_ntoa(&self._addr) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_33__repr__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_33__repr__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_32__repr__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.__addr_ip4_iter.__init__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_cur); - Py_DECREF(__pyx_v_max); - return __pyx_r; -} - -static PyObject *__pyx_n_StopIteration; - -static PyObject *__pyx_f_4dnet_15__addr_ip4_iter___next__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_15__addr_ip4_iter___next__(PyObject *__pyx_v_self) { - struct __pyx_obj_4dnet_addr *__pyx_v_next; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - unsigned short __pyx_4; - Py_INCREF(__pyx_v_self); - __pyx_v_next = ((struct __pyx_obj_4dnet_addr *)Py_None); Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":634 */ - __pyx_1 = (((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur <= ((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->max); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":635 */ - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;} - __pyx_3 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (!__Pyx_TypeTest(__pyx_3, __pyx_ptype_4dnet_addr)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 635; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_next)); - __pyx_v_next = ((struct __pyx_obj_4dnet_addr *)__pyx_3); - __pyx_3 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":636 */ - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_2); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_v_next->_addr.addr_type = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":637 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_BITS); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_3); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_v_next->_addr.addr_bits = __pyx_4; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":638 */ - __pyx_v_next->_addr.addr_ip = htonl(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":639 */ - ((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur = (((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)->cur + 1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":640 */ - Py_INCREF(((PyObject *)__pyx_v_next)); - __pyx_r = ((PyObject *)__pyx_v_next); +static PyObject *__pyx_pf_4dnet_4addr_32__repr__(struct __pyx_obj_4dnet_addr *__pyx_v_self) { + char *__pyx_v_p; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "dnet.pyx":631 + * def __repr__(self): + * cdef char *p + * p = addr_ntoa(&self._addr) # <<<<<<<<<<<<<< + * if not p: + * return '' + */ + __pyx_v_p = addr_ntoa((&__pyx_v_self->_addr)); + + /* "dnet.pyx":632 + * cdef char *p + * p = addr_ntoa(&self._addr) + * if not p: # <<<<<<<<<<<<<< + * return '' + * return p + */ + __pyx_t_1 = ((!(__pyx_v_p != 0)) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":633 + * p = addr_ntoa(&self._addr) + * if not p: + * return '' # <<<<<<<<<<<<<< + * return p + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u_invalid_network_address_2); + __pyx_r = __pyx_kp_u_invalid_network_address_2; goto __pyx_L0; - goto __pyx_L2; - } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":642 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_StopIteration); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; goto __pyx_L1;} + /* "dnet.pyx":632 + * cdef char *p + * p = addr_ntoa(&self._addr) + * if not p: # <<<<<<<<<<<<<< + * return '' + * return p + */ } - __pyx_L2:; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":634 + * if not p: + * return '' + * return p # <<<<<<<<<<<<<< + * + * cdef class __addr_ip4_iter: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyStr_FromString(__pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__addr_ip4_iter.__next__"); - __pyx_r = 0; + + /* "dnet.pyx":629 + * return __addr_ip4_iter(a.addr_ip, b.addr_ip) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * cdef char *p + * p = addr_ntoa(&self._addr) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.addr.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_next); - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet___arp_callback(struct arp_entry (*__pyx_v_entry),void (*__pyx_v_arg)) { - PyObject *__pyx_v_f; - PyObject *__pyx_v_a; - PyObject *__pyx_v_pa; - PyObject *__pyx_v_ha; - PyObject *__pyx_v_ret; - int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - int __pyx_4; - int __pyx_5; - __pyx_v_f = Py_None; Py_INCREF(Py_None); - __pyx_v_a = Py_None; Py_INCREF(Py_None); - __pyx_v_pa = Py_None; Py_INCREF(Py_None); - __pyx_v_ha = Py_None; Py_INCREF(Py_None); - __pyx_v_ret = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":680 */ - __pyx_1 = (PyObject *)__pyx_v_arg; - Py_INCREF(__pyx_1); - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; goto __pyx_L1;} - Py_DECREF(__pyx_v_f); - __pyx_v_f = __pyx_2; - __pyx_2 = 0; - __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; goto __pyx_L1;} - Py_DECREF(__pyx_v_a); - __pyx_v_a = __pyx_3; - __pyx_3 = 0; - if (__Pyx_EndUnpack(__pyx_1, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 680; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":681 */ - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - __pyx_3 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 681; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_v_pa); - __pyx_v_pa = __pyx_3; - __pyx_3 = 0; - Py_DECREF(__pyx_v_ha); - __pyx_v_ha = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":682 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_pa)->_addr = __pyx_v_entry->arp_pa; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":683 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_ha)->_addr = __pyx_v_entry->arp_ha; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":684 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; goto __pyx_L1;} - Py_INCREF(__pyx_v_pa); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_pa); - Py_INCREF(__pyx_v_ha); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_ha); - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); - Py_INCREF(__pyx_v_a); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_a); - __pyx_1 = 0; - __pyx_2 = PyObject_Call(__pyx_v_f, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 684; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":685 */ - __pyx_4 = PyObject_IsTrue(__pyx_v_ret); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 685; goto __pyx_L1;} - __pyx_5 = (!__pyx_4); - if (__pyx_5) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":686 */ - __pyx_1 = PyLong_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 686; goto __pyx_L1;} - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_1; - __pyx_1 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":687 */ - __pyx_4 = PyLong_AsLong(__pyx_v_ret); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 687; goto __pyx_L1;} - __pyx_r = __pyx_4; - goto __pyx_L0; +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_35__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_35__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_34__reduce_cython__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__arp_callback"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_f); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_pa); - Py_DECREF(__pyx_v_ha); - Py_DECREF(__pyx_v_ret); +static PyObject *__pyx_pf_4dnet_4addr_34__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_addr *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4addr_37__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_4addr_37__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4addr_36__setstate_cython__(((struct __pyx_obj_4dnet_addr *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_4addr_36__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_addr *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.addr.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_3arp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_3arp___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +/* "dnet.pyx":640 + * cdef unsigned long max # XXX - HBO + * + * def __init__(self, cur, max): # <<<<<<<<<<<<<< + * self.cur = ntohl(cur) + * self.max = ntohl(max) + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_15__addr_ip4_iter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_15__addr_ip4_iter_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_cur = 0; + PyObject *__pyx_v_max = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":697 */ - ((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp = arp_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":698 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":699 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 699; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cur,&__pyx_n_s_max,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cur)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 640, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 640, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_cur = values[0]; + __pyx_v_max = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 640, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.__addr_ip4_iter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_15__addr_ip4_iter___init__(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self), __pyx_v_cur, __pyx_v_max); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static int __pyx_pf_4dnet_15__addr_ip4_iter___init__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self, PyObject *__pyx_v_cur, PyObject *__pyx_v_max) { + int __pyx_r; + __Pyx_RefNannyDeclarations + unsigned long __pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":641 + * + * def __init__(self, cur, max): + * self.cur = ntohl(cur) # <<<<<<<<<<<<<< + * self.max = ntohl(max) + * + */ + __pyx_t_1 = __Pyx_PyInt_As_unsigned_long(__pyx_v_cur); if (unlikely((__pyx_t_1 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L1_error) + __pyx_v_self->cur = ntohl(__pyx_t_1); + + /* "dnet.pyx":642 + * def __init__(self, cur, max): + * self.cur = ntohl(cur) + * self.max = ntohl(max) # <<<<<<<<<<<<<< + * + * def __next__(self): + */ + __pyx_t_1 = __Pyx_PyInt_As_unsigned_long(__pyx_v_max); if (unlikely((__pyx_t_1 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 642, __pyx_L1_error) + __pyx_v_self->max = ntohl(__pyx_t_1); + + /* "dnet.pyx":640 + * cdef unsigned long max # XXX - HBO + * + * def __init__(self, cur, max): # <<<<<<<<<<<<<< + * self.cur = ntohl(cur) + * self.max = ntohl(max) + */ + + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.arp.__init__"); + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.__addr_ip4_iter.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3arp_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3arp_add[] = "Add an entry to the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n ha -- ADDR_TYPE_ETH network address object\n "; -static PyObject *__pyx_f_4dnet_3arp_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_pa = 0; - struct __pyx_obj_4dnet_addr *__pyx_v_ha = 0; - struct arp_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"pa","ha",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_pa, &__pyx_v_ha)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_pa); - Py_INCREF(__pyx_v_ha); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; goto __pyx_L1;} - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ha), __pyx_ptype_4dnet_addr, 1, "ha")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 701; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":709 */ - __pyx_v_entry.arp_pa = __pyx_v_pa->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":710 */ - __pyx_v_entry.arp_ha = __pyx_v_ha->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":711 */ - __pyx_1 = (arp_add(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,(&__pyx_v_entry)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":712 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 712; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.arp.add"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_pa); - Py_DECREF(__pyx_v_ha); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_3arp_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3arp_delete[] = "Delete an entry from the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n "; -static PyObject *__pyx_f_4dnet_3arp_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_pa = 0; - struct arp_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"pa",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_pa)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_pa); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 714; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":721 */ - __pyx_v_entry.arp_pa = __pyx_v_pa->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":722 */ - __pyx_1 = (arp_delete(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,(&__pyx_v_entry)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":723 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 723; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.arp.delete"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_pa); +/* "dnet.pyx":644 + * self.max = ntohl(max) + * + * def __next__(self): # <<<<<<<<<<<<<< + * cdef addr next + * if (self.cur <= self.max): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_3__next__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_3__next__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__next__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_15__addr_ip4_iter_2__next__(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3arp_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3arp_get[] = "Return the hardware address for a given protocol address\n in the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n "; -static PyObject *__pyx_f_4dnet_3arp_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_pa = 0; - struct arp_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"pa",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_pa)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_pa); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 725; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":733 */ - __pyx_v_entry.arp_pa = __pyx_v_pa->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":734 */ - __pyx_1 = (arp_get(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,(&__pyx_v_entry)) == 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":735 */ - __pyx_2 = PyBytes_FromString(addr_ntoa((&__pyx_v_entry.arp_ha))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 735; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_2__next__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self) { + struct __pyx_obj_4dnet_addr *__pyx_v_next = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + unsigned short __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__next__", 0); + + /* "dnet.pyx":646 + * def __next__(self): + * cdef addr next + * if (self.cur <= self.max): # <<<<<<<<<<<<<< + * next = addr() + * next._addr.addr_type = ADDR_TYPE_IP + */ + __pyx_t_1 = ((__pyx_v_self->cur <= __pyx_v_self->max) != 0); + if (likely(__pyx_t_1)) { + + /* "dnet.pyx":647 + * cdef addr next + * if (self.cur <= self.max): + * next = addr() # <<<<<<<<<<<<<< + * next._addr.addr_type = ADDR_TYPE_IP + * next._addr.addr_bits = IP_ADDR_BITS + */ + __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 647, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_next = ((struct __pyx_obj_4dnet_addr *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dnet.pyx":648 + * if (self.cur <= self.max): + * next = addr() + * next._addr.addr_type = ADDR_TYPE_IP # <<<<<<<<<<<<<< + * next._addr.addr_bits = IP_ADDR_BITS + * next._addr.addr_ip = htonl(self.cur) + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_IP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_3 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 648, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_next->_addr.addr_type = __pyx_t_3; + + /* "dnet.pyx":649 + * next = addr() + * next._addr.addr_type = ADDR_TYPE_IP + * next._addr.addr_bits = IP_ADDR_BITS # <<<<<<<<<<<<<< + * next._addr.addr_ip = htonl(self.cur) + * self.cur = self.cur + 1 + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_IP_ADDR_BITS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyInt_As_unsigned_short(__pyx_t_2); if (unlikely((__pyx_t_3 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_next->_addr.addr_bits = __pyx_t_3; + + /* "dnet.pyx":650 + * next._addr.addr_type = ADDR_TYPE_IP + * next._addr.addr_bits = IP_ADDR_BITS + * next._addr.addr_ip = htonl(self.cur) # <<<<<<<<<<<<<< + * self.cur = self.cur + 1 + * return next + */ + __pyx_v_next->_addr.addr_ip = htonl(__pyx_v_self->cur); + + /* "dnet.pyx":651 + * next._addr.addr_bits = IP_ADDR_BITS + * next._addr.addr_ip = htonl(self.cur) + * self.cur = self.cur + 1 # <<<<<<<<<<<<<< + * return next + * else: + */ + __pyx_v_self->cur = (__pyx_v_self->cur + 1); + + /* "dnet.pyx":652 + * next._addr.addr_ip = htonl(self.cur) + * self.cur = self.cur + 1 + * return next # <<<<<<<<<<<<<< + * else: + * raise StopIteration + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_next)); + __pyx_r = ((PyObject *)__pyx_v_next); goto __pyx_L0; - goto __pyx_L2; + + /* "dnet.pyx":646 + * def __next__(self): + * cdef addr next + * if (self.cur <= self.max): # <<<<<<<<<<<<<< + * next = addr() + * next._addr.addr_type = ADDR_TYPE_IP + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":736 */ - Py_INCREF(Py_None); - __pyx_r = Py_None; - goto __pyx_L0; + /* "dnet.pyx":654 + * return next + * else: + * raise StopIteration # <<<<<<<<<<<<<< + * + * # + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0); + __PYX_ERR(0, 654, __pyx_L1_error) + } - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.arp.get"); - __pyx_r = 0; + /* "dnet.pyx":644 + * self.max = ntohl(max) + * + * def __next__(self): # <<<<<<<<<<<<<< + * cdef addr next + * if (self.cur <= self.max): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.__addr_ip4_iter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_pa); + __Pyx_XDECREF((PyObject *)__pyx_v_next); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3arp_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3arp_loop[] = "Iterate over the system ARP table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with ((pa, ha), arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; -static PyObject *__pyx_f_4dnet_3arp_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_callback = 0; - PyObject *__pyx_v_arg = 0; - PyObject *__pyx_v__arg; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"callback","arg",0}; - __pyx_v_arg = __pyx_k43; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_callback, &__pyx_v_arg)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_callback); - Py_INCREF(__pyx_v_arg); - __pyx_v__arg = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":748 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 748; goto __pyx_L1;} - Py_INCREF(__pyx_v_callback); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_callback); - Py_INCREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_arg); - Py_DECREF(__pyx_v__arg); - __pyx_v__arg = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":749 */ - __pyx_1 = PyLong_FromLong(arp_loop(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp,__pyx_f_4dnet___arp_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 749; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.arp.loop"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v__arg); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_callback); - Py_DECREF(__pyx_v_arg); - return __pyx_r; -} - -static PyObject *__pyx_n_loop; -static PyObject *__pyx_n_iter; - -static PyObject *__pyx_f_4dnet_3arp___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_3arp___iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_v_l; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_l = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":752 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 752; goto __pyx_L1;} - Py_DECREF(__pyx_v_l); - __pyx_v_l = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":753 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_loop); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n___iter_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_l); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 753; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":754 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; goto __pyx_L1;} - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_l); - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 754; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.arp.__iter__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_l); - Py_DECREF(__pyx_v_self); +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_15__addr_ip4_iter_4__reduce_cython__(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_3arp___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_3arp___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":757 */ - __pyx_1 = (((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp != 0); - if (__pyx_1) { +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_4__reduce_cython__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self.cur, self.max) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_self->cur); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_unsigned_long(__pyx_v_self->max); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self.cur, self.max) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v__dict = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":7 + * state = (self.cur, self.max) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_4 = (__pyx_v__dict != Py_None); + __pyx_t_5 = (__pyx_t_4 != 0); + if (__pyx_t_5) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict); + __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = False + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self.cur, self.max) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":758 */ - arp_close(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)->arp); - goto __pyx_L2; + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = False # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, None), state + */ + /*else*/ { + __pyx_v_use_setstate = 0; } - __pyx_L2:; + __pyx_L3:; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.arp.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); -} + /* "(tree fragment)":12 + * else: + * use_setstate = False + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, None), state + * else: + */ + __pyx_t_5 = (__pyx_v_use_setstate != 0); + if (__pyx_t_5) { + + /* "(tree fragment)":13 + * use_setstate = False + * if use_setstate: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle___addr_ip4_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_218787872); + __Pyx_GIVEREF(__pyx_int_218787872); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_218787872); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; -static PyObject *__pyx_f_4dnet_arp_pack_hdr_ethip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_arp_pack_hdr_ethip[] = "Return a packed binary string representing an Ethernet/IP ARP message.\n \n Keyword arguments:\n op -- operation (ARP_OP_*) (16-bit integer)\n sha -- sender Ethernet address (6-byte binary string)\n spa -- sender IP address (4-byte binary string)\n dha -- destination Ethernet address (6-byte binary string)\n dpa -- destination IP address (4-byte binary string)\n "; -static PyObject *__pyx_f_4dnet_arp_pack_hdr_ethip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_op = 0; - PyObject *__pyx_v_sha = 0; - PyObject *__pyx_v_spa = 0; - PyObject *__pyx_v_dha = 0; - PyObject *__pyx_v_dpa = 0; - char (__pyx_v_buf[28]); - eth_addr_t __pyx_v_sh; - eth_addr_t __pyx_v_dh; - ip_addr_t __pyx_v_sp; - ip_addr_t __pyx_v_dp; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - static char *__pyx_argnames[] = {"op","sha","spa","dha","dpa",0}; - __pyx_v_op = __pyx_k44; - __pyx_v_sha = __pyx_k45; - __pyx_v_spa = __pyx_k46; - __pyx_v_dha = __pyx_k47; - __pyx_v_dpa = __pyx_k48; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "|OOOOO", __pyx_argnames, &__pyx_v_op, &__pyx_v_sha, &__pyx_v_spa, &__pyx_v_dha, &__pyx_v_dpa)) return 0; - Py_INCREF(__pyx_v_op); - Py_INCREF(__pyx_v_sha); - Py_INCREF(__pyx_v_spa); - Py_INCREF(__pyx_v_dha); - Py_INCREF(__pyx_v_dpa); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":775 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_sh.data,__pyx_v_sha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":776 */ - __pyx_1 = __pyx_f_4dnet___memcpy(__pyx_v_dh.data,__pyx_v_dha,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 776; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":777 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_sp)),__pyx_v_spa,4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":778 */ - __pyx_1 = __pyx_f_4dnet___memcpy(((char (*))(&__pyx_v_dp)),__pyx_v_dpa,4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 778; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":779 */ - __pyx_2 = PyLong_AsLong(__pyx_v_op); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 779; goto __pyx_L1;} - arp_pack_hdr_ethip(__pyx_v_buf,__pyx_2,__pyx_v_sh,__pyx_v_sp,__pyx_v_dh,__pyx_v_dp); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":780 */ - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_buf,28); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 780; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; + /* "(tree fragment)":12 + * else: + * use_setstate = False + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, None), state + * else: + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.arp_pack_hdr_ethip"); - __pyx_r = 0; + /* "(tree fragment)":15 + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, None), state + * else: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle___addr_ip4_iter__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle___addr_ip4_iter); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_INCREF(__pyx_int_218787872); + __Pyx_GIVEREF(__pyx_int_218787872); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_218787872); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3); + __pyx_t_1 = 0; + __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.__addr_ip4_iter.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_op); - Py_DECREF(__pyx_v_sha); - Py_DECREF(__pyx_v_spa); - Py_DECREF(__pyx_v_dha); - Py_DECREF(__pyx_v_dpa); + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_icmp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_icmp_pack_hdr[] = "Return a packed binary string representing an ICMP header.\n\n Keyword arguments:\n type -- ICMP type (8-bit integer)\n code -- ICMP code (8-bit integer)\n "; -static PyObject *__pyx_f_4dnet_icmp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_type = 0; - PyObject *__pyx_v_code = 0; - char (__pyx_v_buf[4]); - PyObject *__pyx_r; - int __pyx_1; - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"type","code",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_type, &__pyx_v_code)) return 0; - Py_INCREF(__pyx_v_type); - Py_INCREF(__pyx_v_code); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":796 */ - __pyx_1 = PyLong_AsLong(__pyx_v_type); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 796; goto __pyx_L1;} - __pyx_2 = PyLong_AsLong(__pyx_v_code); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 796; goto __pyx_L1;} - icmp_pack_hdr(__pyx_v_buf,__pyx_1,__pyx_2); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":797 */ - __pyx_3 = PyBytes_FromStringAndSize(__pyx_v_buf,(sizeof(__pyx_v_buf))); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 797; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.icmp_pack_hdr"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_type); - Py_DECREF(__pyx_v_code); +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle___addr_ip4_iter__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_15__addr_ip4_iter_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_15__addr_ip4_iter_6__setstate_cython__(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_tcp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_tcp_pack_hdr[] = "Return a packed binary string representing a TCP header.\n\n Keyword arguments:\n sport -- source port (16-bit integer)\n dport -- destination port (16-bit integer)\n seq -- sequence number (32-bit integer)\n ack -- acknowledgment number (32-bit integer)\n flags -- control flags (TH_*) (8-bit integer bitmask)\n win -- window size (16-bit integer)\n urp -- urgent pointer (16-bit integer)\n "; -static PyObject *__pyx_f_4dnet_tcp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_sport = 0; - PyObject *__pyx_v_dport = 0; - PyObject *__pyx_v_seq = 0; - PyObject *__pyx_v_ack = 0; - PyObject *__pyx_v_flags = 0; - PyObject *__pyx_v_win = 0; - PyObject *__pyx_v_urp = 0; - char (__pyx_v_buf[20]); - PyObject *__pyx_r; - int __pyx_1; - int __pyx_2; - unsigned long __pyx_3; - unsigned long __pyx_4; - int __pyx_5; - int __pyx_6; - int __pyx_7; - PyObject *__pyx_8 = 0; - static char *__pyx_argnames[] = {"sport","dport","seq","ack","flags","win","urp",0}; - __pyx_v_seq = __pyx_k49; - __pyx_v_ack = __pyx_k50; - __pyx_v_flags = __pyx_k51; - __pyx_v_win = __pyx_k52; - __pyx_v_urp = __pyx_k53; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO|OOOOO", __pyx_argnames, &__pyx_v_sport, &__pyx_v_dport, &__pyx_v_seq, &__pyx_v_ack, &__pyx_v_flags, &__pyx_v_win, &__pyx_v_urp)) return 0; - Py_INCREF(__pyx_v_sport); - Py_INCREF(__pyx_v_dport); - Py_INCREF(__pyx_v_seq); - Py_INCREF(__pyx_v_ack); - Py_INCREF(__pyx_v_flags); - Py_INCREF(__pyx_v_win); - Py_INCREF(__pyx_v_urp); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":862 */ - __pyx_1 = PyLong_AsLong(__pyx_v_sport); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_2 = PyLong_AsLong(__pyx_v_dport); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_3 = PyLong_AsUnsignedLongMask(__pyx_v_seq); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_4 = PyLong_AsUnsignedLongMask(__pyx_v_ack); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_5 = PyLong_AsLong(__pyx_v_flags); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_6 = PyLong_AsLong(__pyx_v_win); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - __pyx_7 = PyLong_AsLong(__pyx_v_urp); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 862; goto __pyx_L1;} - tcp_pack_hdr(__pyx_v_buf,__pyx_1,__pyx_2,__pyx_3,__pyx_4,__pyx_5,__pyx_6,__pyx_7); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":863 */ - __pyx_8 = PyBytes_FromStringAndSize(__pyx_v_buf,(sizeof(__pyx_v_buf))); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 863; goto __pyx_L1;} - __pyx_r = __pyx_8; - __pyx_8 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_15__addr_ip4_iter_6__setstate_cython__(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":17 + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle___addr_ip4_iter__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_4dnet___pyx_unpickle___addr_ip4_iter__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle___addr_ip4_iter, (type(self), 0xd0a7020, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle___addr_ip4_iter__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_8); - __Pyx_AddTraceback("dnet.tcp_pack_hdr"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.__addr_ip4_iter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_sport); - Py_DECREF(__pyx_v_dport); - Py_DECREF(__pyx_v_seq); - Py_DECREF(__pyx_v_ack); - Py_DECREF(__pyx_v_flags); - Py_DECREF(__pyx_v_win); - Py_DECREF(__pyx_v_urp); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_udp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_udp_pack_hdr[] = "Return a packed binary string representing a UDP header.\n\n Keyword arguments:\n sport -- source port (16-bit integer)\n dport -- destination port (16-bit integer)\n ulen -- UDP header + data length (16-bit integer)\n "; -static PyObject *__pyx_f_4dnet_udp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_sport = 0; - PyObject *__pyx_v_dport = 0; - PyObject *__pyx_v_ulen = 0; - char (__pyx_v_buf[8]); - PyObject *__pyx_r; - int __pyx_1; - int __pyx_2; - int __pyx_3; - PyObject *__pyx_4 = 0; - static char *__pyx_argnames[] = {"sport","dport","ulen",0}; - __pyx_v_ulen = __pyx_k54; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO|O", __pyx_argnames, &__pyx_v_sport, &__pyx_v_dport, &__pyx_v_ulen)) return 0; - Py_INCREF(__pyx_v_sport); - Py_INCREF(__pyx_v_dport); - Py_INCREF(__pyx_v_ulen); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":883 */ - __pyx_1 = PyLong_AsLong(__pyx_v_sport); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; goto __pyx_L1;} - __pyx_2 = PyLong_AsLong(__pyx_v_dport); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_v_ulen); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 883; goto __pyx_L1;} - udp_pack_hdr(__pyx_v_buf,__pyx_1,__pyx_2,__pyx_3); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":884 */ - __pyx_4 = PyBytes_FromStringAndSize(__pyx_v_buf,(sizeof(__pyx_v_buf))); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 884; goto __pyx_L1;} - __pyx_r = __pyx_4; - __pyx_4 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.udp_pack_hdr"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_sport); - Py_DECREF(__pyx_v_dport); - Py_DECREF(__pyx_v_ulen); - return __pyx_r; -} - -static PyObject *__pyx_n_name; -static PyObject *__pyx_n_type; -static PyObject *__pyx_n_flags; -static PyObject *__pyx_n_mtu; -static PyObject *__pyx_n_addr; -static PyObject *__pyx_n_dst_addr; -static PyObject *__pyx_n_link_addr; -static PyObject *__pyx_n_alias_addrs; - - -static PyObject *__pyx_f_4dnet_ifent_to_dict(struct intf_entry (*__pyx_v_entry)) { - PyObject *__pyx_v_d; - PyObject *__pyx_v_l; - PyObject *__pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - int __pyx_3; - long __pyx_4; - unsigned int __pyx_5; - Py_ssize_t __pyx_6; - PyObject *__pyx_7 = 0; - __pyx_v_d = Py_None; Py_INCREF(Py_None); - __pyx_v_l = Py_None; Py_INCREF(Py_None); - __pyx_v_i = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":926 */ - __pyx_1 = PyDict_New(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 926; goto __pyx_L1;} - Py_DECREF(__pyx_v_d); - __pyx_v_d = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":927 */ - __pyx_1 = PyBytes_FromString(__pyx_v_entry->intf_name); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_name, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 927; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":928 */ - __pyx_1 = PyLong_FromLong(__pyx_v_entry->intf_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_type, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 928; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":929 */ - __pyx_1 = PyLong_FromLong(__pyx_v_entry->intf_flags); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_flags, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 929; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":930 */ - __pyx_1 = PyLong_FromUnsignedLong(__pyx_v_entry->intf_mtu); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 930; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_mtu, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 930; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":931 */ - __pyx_1 = PyLong_FromLong(__pyx_v_entry->intf_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 931; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":932 */ - __pyx_1 = PyBytes_FromString(addr_ntoa((&__pyx_v_entry->intf_addr))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1); - __pyx_1 = 0; - __pyx_1 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_addr, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 932; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":933 */ - __pyx_2 = PyLong_FromLong(__pyx_v_entry->intf_dst_addr.addr_type); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; goto __pyx_L1;} - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_2, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 933; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":934 */ - __pyx_2 = PyBytes_FromString(addr_ntoa((&__pyx_v_entry->intf_dst_addr))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_dst_addr, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 934; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - goto __pyx_L3; - } - __pyx_L3:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":935 */ - __pyx_1 = PyLong_FromLong(__pyx_v_entry->intf_link_addr.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_2, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 935; goto __pyx_L1;} - __pyx_3 = __pyx_3 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":936 */ - __pyx_1 = PyBytes_FromString(addr_ntoa((&__pyx_v_entry->intf_link_addr))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; goto __pyx_L1;} - __pyx_2 = PyTuple_New(1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1); - __pyx_1 = 0; - __pyx_1 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_2, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_link_addr, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 936; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L4; +/* "dnet.pyx":691 + * ARP_OP_REVREPLY = 4 # /[inserted by cython to avoid comment start]* response giving protocol address *[inserted by cython to avoid comment closer]/ + * + * cdef int __arp_callback(arp_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * pa, ha = addr(), addr() + */ + +static int __pyx_f_4dnet___arp_callback(struct arp_entry *__pyx_v_entry, void *__pyx_v_arg) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_a = NULL; + struct __pyx_obj_4dnet_addr *__pyx_v_pa = NULL; + struct __pyx_obj_4dnet_addr *__pyx_v_ha = NULL; + PyObject *__pyx_v_ret = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + struct addr __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__arp_callback", 0); + + /* "dnet.pyx":692 + * + * cdef int __arp_callback(arp_entry *entry, void *arg) except -1: + * f, a = arg # <<<<<<<<<<<<<< + * pa, ha = addr(), addr() + * (pa)._addr = entry.arp_pa + */ + __pyx_t_1 = ((PyObject *)__pyx_v_arg); + __Pyx_INCREF(__pyx_t_1); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 692, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_L4_unpacking_done:; } - __pyx_L4:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":937 */ - __pyx_3 = (__pyx_v_entry->intf_alias_num > 0); - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":938 */ - __pyx_2 = PyList_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 938; goto __pyx_L1;} - Py_DECREF(__pyx_v_l); - __pyx_v_l = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":939 */ - __pyx_5 = __pyx_v_entry->intf_alias_num; - for (__pyx_4 = 0; __pyx_4 < __pyx_5; ++__pyx_4) { - __pyx_1 = PyLong_FromLong(__pyx_4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 939; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":940 */ - __pyx_2 = PyObject_GetAttr(__pyx_v_l, __pyx_n_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - __pyx_6 = PyLong_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - __pyx_1 = PyBytes_FromString(addr_ntoa((&(__pyx_v_entry->intf_alias_addrs[__pyx_6])))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - __pyx_7 = PyTuple_New(1); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_7, 0, __pyx_1); - __pyx_1 = 0; - __pyx_1 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_7, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - Py_DECREF(__pyx_7); __pyx_7 = 0; - __pyx_7 = PyTuple_New(1); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_7, 0, __pyx_1); - __pyx_1 = 0; - __pyx_1 = PyObject_Call(__pyx_2, __pyx_7, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 940; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_7); __pyx_7 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_L6:; - } - __pyx_L7:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":941 */ - if (PyObject_SetItem(__pyx_v_d, __pyx_n_alias_addrs, __pyx_v_l) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 941; goto __pyx_L1;} - goto __pyx_L5; - } - __pyx_L5:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":942 */ - Py_INCREF(__pyx_v_d); - __pyx_r = __pyx_v_d; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_7); - __Pyx_AddTraceback("dnet.ifent_to_dict"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_d); - Py_DECREF(__pyx_v_l); - Py_DECREF(__pyx_v_i); - return __pyx_r; -} - -static PyObject *__pyx_n_len; - - -static PyObject *__pyx_f_4dnet_dict_to_ifent(PyObject *__pyx_v_d,struct intf_entry (*__pyx_v_entry)) { - PyObject *__pyx_v_s; - PyObject *__pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - char (*__pyx_2); - int __pyx_3; - unsigned short __pyx_4; - unsigned int __pyx_5; - PyObject *__pyx_6 = 0; - PyObject *__pyx_7 = 0; - long __pyx_8; - Py_ssize_t __pyx_9; - Py_INCREF(__pyx_v_d); - __pyx_v_s = Py_None; Py_INCREF(Py_None); - __pyx_v_i = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":945 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_name); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 945; goto __pyx_L1;} - Py_DECREF(__pyx_v_s); - __pyx_v_s = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":946 */ - __pyx_2 = PyBytes_AsString(__pyx_v_s); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 946; goto __pyx_L1;} - strlcpy(__pyx_v_entry->intf_name,__pyx_2,16); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":947 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_flags); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 947; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":948 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_flags); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 948; goto __pyx_L1;} - __pyx_4 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 948; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_v_entry->intf_flags = __pyx_4; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":949 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_mtu); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 949; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":950 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_mtu); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} - __pyx_5 = PyLong_AsUnsignedLongMask(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 950; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_v_entry->intf_mtu = __pyx_5; - goto __pyx_L3; + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_a = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":693 + * cdef int __arp_callback(arp_entry *entry, void *arg) except -1: + * f, a = arg + * pa, ha = addr(), addr() # <<<<<<<<<<<<<< + * (pa)._addr = entry.arp_pa + * (ha)._addr = entry.arp_ha + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_pa = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_ha = ((struct __pyx_obj_4dnet_addr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":694 + * f, a = arg + * pa, ha = addr(), addr() + * (pa)._addr = entry.arp_pa # <<<<<<<<<<<<<< + * (ha)._addr = entry.arp_ha + * ret = f((pa, ha), a) + */ + __pyx_t_6 = __pyx_v_entry->arp_pa; + __pyx_v_pa->_addr = __pyx_t_6; + + /* "dnet.pyx":695 + * pa, ha = addr(), addr() + * (pa)._addr = entry.arp_pa + * (ha)._addr = entry.arp_ha # <<<<<<<<<<<<<< + * ret = f((pa, ha), a) + * if not ret: + */ + __pyx_t_6 = __pyx_v_entry->arp_ha; + __pyx_v_ha->_addr = __pyx_t_6; + + /* "dnet.pyx":696 + * (pa)._addr = entry.arp_pa + * (ha)._addr = entry.arp_ha + * ret = f((pa, ha), a) # <<<<<<<<<<<<<< + * if not ret: + * ret = 0 + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)__pyx_v_pa)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_pa)); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_pa)); + __Pyx_INCREF(((PyObject *)__pyx_v_ha)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_ha)); + PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_ha)); + __Pyx_INCREF(__pyx_v_f); + __pyx_t_2 = __pyx_v_f; __pyx_t_4 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } } - __pyx_L3:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":951 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_addr); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 951; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":952 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_addr); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 952; goto __pyx_L1;} - __pyx_v_entry->intf_addr = ((struct __pyx_obj_4dnet_addr *)__pyx_1)->_addr; - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L4; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_a}; + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_a}; + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_a); + __Pyx_GIVEREF(__pyx_v_a); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_a); + __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 696, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - __pyx_L4:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":953 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_dst_addr); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 953; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":954 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_dst_addr); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 954; goto __pyx_L1;} - __pyx_v_entry->intf_dst_addr = ((struct __pyx_obj_4dnet_addr *)__pyx_1)->_addr; - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L5; - } - __pyx_L5:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":955 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_link_addr); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 955; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":956 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_link_addr); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 956; goto __pyx_L1;} - __pyx_v_entry->intf_link_addr = ((struct __pyx_obj_4dnet_addr *)__pyx_1)->_addr; - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L6; - } - __pyx_L6:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":957 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_alias_addrs); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 957; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":958 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_len); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} - __pyx_6 = PyObject_GetItem(__pyx_v_d, __pyx_n_alias_addrs); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} - __pyx_7 = PyTuple_New(1); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_7, 0, __pyx_6); - __pyx_6 = 0; - __pyx_6 = PyObject_Call(__pyx_1, __pyx_7, 0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_7); __pyx_7 = 0; - __pyx_5 = PyLong_AsUnsignedLongMask(__pyx_6); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 958; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - __pyx_v_entry->intf_alias_num = __pyx_5; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":959 */ - __pyx_5 = __pyx_v_entry->intf_alias_num; - for (__pyx_8 = 0; __pyx_8 < __pyx_5; ++__pyx_8) { - __pyx_1 = PyLong_FromLong(__pyx_8); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 959; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":960 */ - __pyx_7 = PyObject_GetItem(__pyx_v_d, __pyx_n_alias_addrs); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 960; goto __pyx_L1;} - __pyx_6 = PyObject_GetItem(__pyx_7, __pyx_v_i); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 960; goto __pyx_L1;} - Py_DECREF(__pyx_7); __pyx_7 = 0; - __pyx_9 = PyLong_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 960; goto __pyx_L1;} - (__pyx_v_entry->intf_alias_addrs[__pyx_9]) = ((struct __pyx_obj_4dnet_addr *)__pyx_6)->_addr; - Py_DECREF(__pyx_6); __pyx_6 = 0; - __pyx_L8:; - } - __pyx_L9:; - goto __pyx_L7; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_ret = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":697 + * (ha)._addr = entry.arp_ha + * ret = f((pa, ha), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_ret); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 697, __pyx_L1_error) + __pyx_t_10 = ((!__pyx_t_9) != 0); + if (__pyx_t_10) { + + /* "dnet.pyx":698 + * ret = f((pa, ha), a) + * if not ret: + * ret = 0 # <<<<<<<<<<<<<< + * return ret + * + */ + __Pyx_INCREF(__pyx_int_0); + __Pyx_DECREF_SET(__pyx_v_ret, __pyx_int_0); + + /* "dnet.pyx":697 + * (ha)._addr = entry.arp_ha + * ret = f((pa, ha), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ } - __pyx_L7:; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":699 + * if not ret: + * ret = 0 + * return ret # <<<<<<<<<<<<<< + * + * cdef class arp: + */ + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_ret); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_r = __pyx_t_7; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_6); - Py_XDECREF(__pyx_7); - __Pyx_AddTraceback("dnet.dict_to_ifent"); - __pyx_r = 0; + + /* "dnet.pyx":691 + * ARP_OP_REVREPLY = 4 # /[inserted by cython to avoid comment start]* response giving protocol address *[inserted by cython to avoid comment closer]/ + * + * cdef int __arp_callback(arp_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * pa, ha = addr(), addr() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dnet.__arp_callback", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_s); - Py_DECREF(__pyx_v_i); - Py_DECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_a); + __Pyx_XDECREF((PyObject *)__pyx_v_pa); + __Pyx_XDECREF((PyObject *)__pyx_v_ha); + __Pyx_XDECREF(__pyx_v_ret); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet___intf_callback(struct intf_entry (*__pyx_v_entry),void (*__pyx_v_arg)) { - PyObject *__pyx_v_f; - PyObject *__pyx_v_a; - PyObject *__pyx_v_ret; +/* "dnet.pyx":708 + * cdef arp_t *arp + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.arp = arp_open() + * if not self.arp: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_3arp_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_3arp_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - int __pyx_4; - int __pyx_5; - __pyx_v_f = Py_None; Py_INCREF(Py_None); - __pyx_v_a = Py_None; Py_INCREF(Py_None); - __pyx_v_ret = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":963 */ - __pyx_1 = (PyObject *)__pyx_v_arg; - Py_INCREF(__pyx_1); - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; goto __pyx_L1;} - Py_DECREF(__pyx_v_f); - __pyx_v_f = __pyx_2; - __pyx_2 = 0; - __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; goto __pyx_L1;} - Py_DECREF(__pyx_v_a); - __pyx_v_a = __pyx_3; - __pyx_3 = 0; - if (__Pyx_EndUnpack(__pyx_1, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 963; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":964 */ - __pyx_2 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_entry); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_a); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_a); - __pyx_2 = 0; - __pyx_1 = PyObject_Call(__pyx_v_f, __pyx_3, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 964; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":965 */ - __pyx_4 = PyObject_IsTrue(__pyx_v_ret); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 965; goto __pyx_L1;} - __pyx_5 = (!__pyx_4); - if (__pyx_5) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":966 */ - __pyx_2 = PyLong_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 966; goto __pyx_L1;} - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_2; - __pyx_2 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":967 */ - __pyx_4 = PyLong_AsLong(__pyx_v_ret); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 967; goto __pyx_L1;} - __pyx_r = __pyx_4; - goto __pyx_L0; - - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__intf_callback"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_f); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_ret); + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_3arp___init__(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_4intf___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_4intf___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static int __pyx_pf_4dnet_3arp___init__(struct __pyx_obj_4dnet_arp *__pyx_v_self) { int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":977 */ - ((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf = intf_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":978 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":979 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 979; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 979; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 979; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":709 + * + * def __init__(self): + * self.arp = arp_open() # <<<<<<<<<<<<<< + * if not self.arp: + * raise OSError, __oserror() + */ + __pyx_v_self->arp = arp_open(); + + /* "dnet.pyx":710 + * def __init__(self): + * self.arp = arp_open() + * if not self.arp: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->arp != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":711 + * self.arp = arp_open() + * if not self.arp: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def add(self, addr pa, addr ha): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 711, __pyx_L1_error) + + /* "dnet.pyx":710 + * def __init__(self): + * self.arp = arp_open() + * if not self.arp: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + + /* "dnet.pyx":708 + * cdef arp_t *arp + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.arp = arp_open() + * if not self.arp: + */ + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.intf.__init__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.arp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4intf_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4intf_get[] = "Return the configuration for a network interface as a dict.\n "; -static PyObject *__pyx_f_4dnet_4intf_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_name = 0; - struct intf_entry (*__pyx_v_ifent); - char (__pyx_v_buf[1024]); - PyObject *__pyx_r; - char (*__pyx_1); - int __pyx_2; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - static char *__pyx_argnames[] = {"name",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_name)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_name); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":986 */ - __pyx_v_ifent = ((struct intf_entry (*))__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":987 */ - __pyx_v_ifent->intf_len = 1024; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":988 */ - __pyx_1 = PyBytes_AsString(__pyx_v_name); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 988; goto __pyx_L1;} - strlcpy(__pyx_v_ifent->intf_name,__pyx_1,16); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":989 */ - __pyx_2 = (intf_get(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_v_ifent) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":990 */ - __pyx_3 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} - __pyx_4 = __pyx_f_4dnet___oserror(); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} - __Pyx_Raise(__pyx_3, __pyx_4, 0); - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 990; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":991 */ - __pyx_3 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 991; goto __pyx_L1;} - __pyx_r = __pyx_3; - __pyx_3 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("dnet.intf.get"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_name); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4intf_get_src(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4intf_get_src[] = "Return the configuration for the interface whose primary address\n matches the specified source address.\n "; -static PyObject *__pyx_f_4dnet_4intf_get_src(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_src = 0; - struct intf_entry (*__pyx_v_ifent); - char (__pyx_v_buf[1024]); - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"src",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_src)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_src); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_src), __pyx_ptype_4dnet_addr, 1, "src")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 993; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":999 */ - __pyx_v_ifent = ((struct intf_entry (*))__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1000 */ - __pyx_v_ifent->intf_len = 1024; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1001 */ - __pyx_1 = (intf_get_src(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_v_ifent,(&__pyx_v_src->_addr)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1002 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1002; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1003 */ - __pyx_2 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1003; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; +/* "dnet.pyx":713 + * raise OSError, __oserror() + * + * def add(self, addr pa, addr ha): # <<<<<<<<<<<<<< + * """Add an entry to the system ARP table. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_3arp_2add[] = "Add an entry to the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n ha -- ADDR_TYPE_ETH network address object\n "; +static PyObject *__pyx_pw_4dnet_3arp_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + struct __pyx_obj_4dnet_addr *__pyx_v_pa = 0; + struct __pyx_obj_4dnet_addr *__pyx_v_ha = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("add (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pa,&__pyx_n_s_ha,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pa)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ha)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, 1); __PYX_ERR(0, 713, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add") < 0)) __PYX_ERR(0, 713, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_pa = ((struct __pyx_obj_4dnet_addr *)values[0]); + __pyx_v_ha = ((struct __pyx_obj_4dnet_addr *)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 713, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.arp.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa", 0))) __PYX_ERR(0, 713, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ha), __pyx_ptype_4dnet_addr, 1, "ha", 0))) __PYX_ERR(0, 713, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_3arp_2add(((struct __pyx_obj_4dnet_arp *)__pyx_v_self), __pyx_v_pa, __pyx_v_ha); - __pyx_r = Py_None; Py_INCREF(Py_None); + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.intf.get_src"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_src); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4intf_get_dst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4intf_get_dst[] = "Return the configuration for the best interface with which to\n reach the specified dst address.\n "; -static PyObject *__pyx_f_4dnet_4intf_get_dst(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; - struct intf_entry (*__pyx_v_ifent); - char (__pyx_v_buf[1024]); - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"dst",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_dst)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_dst); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1005; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1011 */ - __pyx_v_ifent = ((struct intf_entry (*))__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1012 */ - __pyx_v_ifent->intf_len = 1024; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1013 */ - __pyx_1 = (intf_get_dst(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_v_ifent,(&__pyx_v_dst->_addr)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1014 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1014; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1015 */ - __pyx_2 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1015; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; +static PyObject *__pyx_pf_4dnet_3arp_2add(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa, struct __pyx_obj_4dnet_addr *__pyx_v_ha) { + struct arp_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("add", 0); + + /* "dnet.pyx":721 + * """ + * cdef arp_entry entry + * entry.arp_pa = pa._addr # <<<<<<<<<<<<<< + * entry.arp_ha = ha._addr + * if arp_add(self.arp, &entry) < 0: + */ + __pyx_t_1 = __pyx_v_pa->_addr; + __pyx_v_entry.arp_pa = __pyx_t_1; + + /* "dnet.pyx":722 + * cdef arp_entry entry + * entry.arp_pa = pa._addr + * entry.arp_ha = ha._addr # <<<<<<<<<<<<<< + * if arp_add(self.arp, &entry) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_v_ha->_addr; + __pyx_v_entry.arp_ha = __pyx_t_1; + + /* "dnet.pyx":723 + * entry.arp_pa = pa._addr + * entry.arp_ha = ha._addr + * if arp_add(self.arp, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((arp_add(__pyx_v_self->arp, (&__pyx_v_entry)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":724 + * entry.arp_ha = ha._addr + * if arp_add(self.arp, &entry) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def delete(self, addr pa): + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 724, __pyx_L1_error) + + /* "dnet.pyx":723 + * entry.arp_pa = pa._addr + * entry.arp_ha = ha._addr + * if arp_add(self.arp, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + + /* "dnet.pyx":713 + * raise OSError, __oserror() + * + * def add(self, addr pa, addr ha): # <<<<<<<<<<<<<< + * """Add an entry to the system ARP table. + * + */ - __pyx_r = Py_None; Py_INCREF(Py_None); + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.intf.get_dst"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.arp.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_dst); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4intf_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4intf_set[] = "Set the configuration for an interface from a dict.\n\n Dict values:\n name -- name of interface to set (string)\n flags -- interface flags (INTF_FLAG_*) (integer bitmask)\n mtu -- interface MTU (integer)\n addr -- primary network address (addr object)\n dst_addr -- point-to-point dst address (addr object)\n link_addr -- link-layer address (addr object)\n alias_addrs -- additional network addresses (list of addr objects)\n "; -static PyObject *__pyx_f_4dnet_4intf_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_d = 0; - struct intf_entry (*__pyx_v_ifent); - char (__pyx_v_buf[1024]); - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"d",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_d)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_d); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1031 */ - memset(__pyx_v_buf,0,(sizeof(__pyx_v_buf))); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1032 */ - __pyx_v_ifent = ((struct intf_entry (*))__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1033 */ - __pyx_v_ifent->intf_len = 1024; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1034 */ - __pyx_1 = __pyx_f_4dnet_dict_to_ifent(__pyx_v_d,__pyx_v_ifent); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1034; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1035 */ - __pyx_2 = (intf_set(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_v_ifent) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1036 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_3, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1036; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":726 + * raise OSError, __oserror() + * + * def delete(self, addr pa): # <<<<<<<<<<<<<< + * """Delete an entry from the system ARP table. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_pa); /*proto*/ +static char __pyx_doc_4dnet_3arp_4delete[] = "Delete an entry from the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n "; +static PyObject *__pyx_pw_4dnet_3arp_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_pa) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("delete (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa", 0))) __PYX_ERR(0, 726, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_3arp_4delete(((struct __pyx_obj_4dnet_arp *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_pa)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.intf.set"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_d); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4intf_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4intf_loop[] = "Iterate over the system interface table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with (dict, arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; -static PyObject *__pyx_f_4dnet_4intf_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_callback = 0; - PyObject *__pyx_v_arg = 0; - PyObject *__pyx_v__arg; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"callback","arg",0}; - __pyx_v_arg = __pyx_k55; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_callback, &__pyx_v_arg)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_callback); - Py_INCREF(__pyx_v_arg); - __pyx_v__arg = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1048 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1048; goto __pyx_L1;} - Py_INCREF(__pyx_v_callback); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_callback); - Py_INCREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_arg); - Py_DECREF(__pyx_v__arg); - __pyx_v__arg = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1049 */ - __pyx_1 = PyLong_FromLong(intf_loop(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf,__pyx_f_4dnet___intf_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1049; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; +static PyObject *__pyx_pf_4dnet_3arp_4delete(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa) { + struct arp_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("delete", 0); + + /* "dnet.pyx":733 + * """ + * cdef arp_entry entry + * entry.arp_pa = pa._addr # <<<<<<<<<<<<<< + * if arp_delete(self.arp, &entry) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_v_pa->_addr; + __pyx_v_entry.arp_pa = __pyx_t_1; + + /* "dnet.pyx":734 + * cdef arp_entry entry + * entry.arp_pa = pa._addr + * if arp_delete(self.arp, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((arp_delete(__pyx_v_self->arp, (&__pyx_v_entry)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":735 + * entry.arp_pa = pa._addr + * if arp_delete(self.arp, &entry) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def get(self, addr pa): + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 735, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 735, __pyx_L1_error) + + /* "dnet.pyx":734 + * cdef arp_entry entry + * entry.arp_pa = pa._addr + * if arp_delete(self.arp, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":726 + * raise OSError, __oserror() + * + * def delete(self, addr pa): # <<<<<<<<<<<<<< + * """Delete an entry from the system ARP table. + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.intf.loop"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.arp.delete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v__arg); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_callback); - Py_DECREF(__pyx_v_arg); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_4intf___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_4intf___iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_v_l; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_l = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1052 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1052; goto __pyx_L1;} - Py_DECREF(__pyx_v_l); - __pyx_v_l = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1053 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_loop); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n___iter_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_l); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1053; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1054 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_l); - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1054; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +/* "dnet.pyx":737 + * raise OSError, __oserror() + * + * def get(self, addr pa): # <<<<<<<<<<<<<< + * """Return the hardware address for a given protocol address + * in the system ARP table. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_7get(PyObject *__pyx_v_self, PyObject *__pyx_v_pa); /*proto*/ +static char __pyx_doc_4dnet_3arp_6get[] = "Return the hardware address for a given protocol address\n in the system ARP table.\n\n Arguments:\n pa -- ADDR_TYPE_IP network address object\n "; +static PyObject *__pyx_pw_4dnet_3arp_7get(PyObject *__pyx_v_self, PyObject *__pyx_v_pa) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pa), __pyx_ptype_4dnet_addr, 1, "pa", 0))) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_3arp_6get(((struct __pyx_obj_4dnet_arp *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_pa)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.intf.__iter__"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_l); - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_4intf___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_4intf___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1057 */ - __pyx_1 = (((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf != 0); - if (__pyx_1) { +static PyObject *__pyx_pf_4dnet_3arp_6get(struct __pyx_obj_4dnet_arp *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_pa) { + struct arp_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get", 0); + + /* "dnet.pyx":745 + * """ + * cdef arp_entry entry + * entry.arp_pa = pa._addr # <<<<<<<<<<<<<< + * if arp_get(self.arp, &entry) == 0: + * return addr(addr_ntoa(&entry.arp_ha)) + */ + __pyx_t_1 = __pyx_v_pa->_addr; + __pyx_v_entry.arp_pa = __pyx_t_1; + + /* "dnet.pyx":746 + * cdef arp_entry entry + * entry.arp_pa = pa._addr + * if arp_get(self.arp, &entry) == 0: # <<<<<<<<<<<<<< + * return addr(addr_ntoa(&entry.arp_ha)) + * return None + */ + __pyx_t_2 = ((arp_get(__pyx_v_self->arp, (&__pyx_v_entry)) == 0) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":747 + * entry.arp_pa = pa._addr + * if arp_get(self.arp, &entry) == 0: + * return addr(addr_ntoa(&entry.arp_ha)) # <<<<<<<<<<<<<< + * return None + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_entry.arp_ha))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 747, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1058 */ - intf_close(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)->intf); - goto __pyx_L2; + /* "dnet.pyx":746 + * cdef arp_entry entry + * entry.arp_pa = pa._addr + * if arp_get(self.arp, &entry) == 0: # <<<<<<<<<<<<<< + * return addr(addr_ntoa(&entry.arp_ha)) + * return None + */ } - __pyx_L2:; - - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.intf.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); -} -static int __pyx_f_4dnet___route_callback(struct route_entry (*__pyx_v_entry),void (*__pyx_v_arg)) { - PyObject *__pyx_v_f; - PyObject *__pyx_v_a; - PyObject *__pyx_v_dst; - PyObject *__pyx_v_gw; - PyObject *__pyx_v_ret; - int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - int __pyx_4; - int __pyx_5; - __pyx_v_f = Py_None; Py_INCREF(Py_None); - __pyx_v_a = Py_None; Py_INCREF(Py_None); - __pyx_v_dst = Py_None; Py_INCREF(Py_None); - __pyx_v_gw = Py_None; Py_INCREF(Py_None); - __pyx_v_ret = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1079 */ - __pyx_1 = (PyObject *)__pyx_v_arg; - Py_INCREF(__pyx_1); - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; goto __pyx_L1;} - Py_DECREF(__pyx_v_f); - __pyx_v_f = __pyx_2; - __pyx_2 = 0; - __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; goto __pyx_L1;} - Py_DECREF(__pyx_v_a); - __pyx_v_a = __pyx_3; - __pyx_3 = 0; - if (__Pyx_EndUnpack(__pyx_1, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1079; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1080 */ - __pyx_2 = PyTuple_New(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} - __pyx_3 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_2, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = PyTuple_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1080; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_v_dst); - __pyx_v_dst = __pyx_3; - __pyx_3 = 0; - Py_DECREF(__pyx_v_gw); - __pyx_v_gw = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1081 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_dst)->_addr = __pyx_v_entry->route_dst; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1082 */ - ((struct __pyx_obj_4dnet_addr *)__pyx_v_gw)->_addr = __pyx_v_entry->route_gw; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1083 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} - Py_INCREF(__pyx_v_dst); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_dst); - Py_INCREF(__pyx_v_gw); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_gw); - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); - Py_INCREF(__pyx_v_a); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_a); - __pyx_1 = 0; - __pyx_2 = PyObject_Call(__pyx_v_f, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1084 */ - __pyx_4 = PyObject_IsTrue(__pyx_v_ret); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; goto __pyx_L1;} - __pyx_5 = (!__pyx_4); - if (__pyx_5) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1085 */ - __pyx_1 = PyLong_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1085; goto __pyx_L1;} - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_1; - __pyx_1 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1086 */ - __pyx_4 = PyLong_AsLong(__pyx_v_ret); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1086; goto __pyx_L1;} - __pyx_r = __pyx_4; + /* "dnet.pyx":748 + * if arp_get(self.arp, &entry) == 0: + * return addr(addr_ntoa(&entry.arp_ha)) + * return None # <<<<<<<<<<<<<< + * + * def loop(self, callback, arg=None): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__route_callback"); - __pyx_r = -1; + /* "dnet.pyx":737 + * raise OSError, __oserror() + * + * def get(self, addr pa): # <<<<<<<<<<<<<< + * """Return the hardware address for a given protocol address + * in the system ARP table. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.arp.get", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_f); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_dst); - Py_DECREF(__pyx_v_gw); - Py_DECREF(__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_5route___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_5route___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1096 */ - ((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route = route_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1097 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1098 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1098; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; +/* "dnet.pyx":750 + * return None + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system ARP table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_9loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_3arp_8loop[] = "Iterate over the system ARP table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with ((pa, ha), arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; +static PyObject *__pyx_pw_4dnet_3arp_9loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_callback = 0; + PyObject *__pyx_v_arg = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("loop (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback,&__pyx_n_s_arg,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_callback)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loop") < 0)) __PYX_ERR(0, 750, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_callback = values[0]; + __pyx_v_arg = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("loop", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 750, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.arp.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_3arp_8loop(((struct __pyx_obj_4dnet_arp *)__pyx_v_self), __pyx_v_callback, __pyx_v_arg); - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.route.__init__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_self); + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_5route_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_5route_add[] = "Add an entry to the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n gw -- ADDR_TYPE_IP network address object\n "; -static PyObject *__pyx_f_4dnet_5route_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; - struct __pyx_obj_4dnet_addr *__pyx_v_gw = 0; - struct route_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"dst","gw",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_dst, &__pyx_v_gw)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_dst); - Py_INCREF(__pyx_v_gw); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; goto __pyx_L1;} - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gw), __pyx_ptype_4dnet_addr, 1, "gw")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1100; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1108 */ - __pyx_v_entry.route_dst = __pyx_v_dst->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1109 */ - __pyx_v_entry.route_gw = __pyx_v_gw->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1110 */ - __pyx_1 = (route_add(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,(&__pyx_v_entry)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1111 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1111; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_3arp_8loop(struct __pyx_obj_4dnet_arp *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg) { + PyObject *__pyx_v__arg = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("loop", 0); + + /* "dnet.pyx":760 + * arg -- optional callback argument + * """ + * _arg = (callback, arg) # <<<<<<<<<<<<<< + * return arp_loop(self.arp, __arp_callback, _arg) + * + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_callback); + __Pyx_GIVEREF(__pyx_v_callback); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_callback); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_arg); + __pyx_v__arg = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":761 + * """ + * _arg = (callback, arg) + * return arp_loop(self.arp, __arp_callback, _arg) # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(arp_loop(__pyx_v_self->arp, __pyx_f_4dnet___arp_callback, ((void *)__pyx_v__arg))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.route.add"); - __pyx_r = 0; + + /* "dnet.pyx":750 + * return None + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system ARP table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.arp.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_dst); - Py_DECREF(__pyx_v_gw); + __Pyx_XDECREF(__pyx_v__arg); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_5route_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_5route_delete[] = "Delete an entry from the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n "; -static PyObject *__pyx_f_4dnet_5route_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; - struct route_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"dst",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_dst)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_dst); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1113; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1120 */ - __pyx_v_entry.route_dst = __pyx_v_dst->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1121 */ - __pyx_1 = (route_delete(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,(&__pyx_v_entry)) < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1122 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1122; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1122; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1122; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.route.delete"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_dst); +/* "dnet.pyx":763 + * return arp_loop(self.arp, __arp_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_11__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_3arp_11__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3arp_10__iter__(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_5route_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_5route_get[] = "Return the hardware address for a given protocol address\n in the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n "; -static PyObject *__pyx_f_4dnet_5route_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; - struct route_entry __pyx_v_entry; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"dst",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_dst)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_dst); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1124; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1132 */ - __pyx_v_entry.route_dst = __pyx_v_dst->_addr; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1133 */ - __pyx_1 = (route_get(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,(&__pyx_v_entry)) == 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1134 */ - __pyx_2 = PyBytes_FromString(addr_ntoa((&__pyx_v_entry.route_gw))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1134; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_3arp_10__iter__(struct __pyx_obj_4dnet_arp *__pyx_v_self) { + PyObject *__pyx_v_l = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":764 + * + * def __iter__(self): + * l = [] # <<<<<<<<<<<<<< + * self.loop(__iter_append, l) + * return iter(l) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_l = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":765 + * def __iter__(self): + * l = [] + * self.loop(__iter_append, l) # <<<<<<<<<<<<<< + * return iter(l) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_iter_append); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1135 */ - Py_INCREF(Py_None); - __pyx_r = Py_None; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_l); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":766 + * l = [] + * self.loop(__iter_append, l) + * return iter(l) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.route.get"); - __pyx_r = 0; + /* "dnet.pyx":763 + * return arp_loop(self.arp, __arp_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("dnet.arp.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_dst); + __Pyx_XDECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_5route_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_5route_loop[] = "Iterate over the system routing table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with ((dst, gw), arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; -static PyObject *__pyx_f_4dnet_5route_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_callback = 0; - PyObject *__pyx_v_arg = 0; - PyObject *__pyx_v__arg; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"callback","arg",0}; - __pyx_v_arg = __pyx_k56; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_callback, &__pyx_v_arg)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_callback); - Py_INCREF(__pyx_v_arg); - __pyx_v__arg = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1147 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1147; goto __pyx_L1;} - Py_INCREF(__pyx_v_callback); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_callback); - Py_INCREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_arg); - Py_DECREF(__pyx_v__arg); - __pyx_v__arg = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1148 */ - __pyx_1 = PyLong_FromLong(route_loop(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route,__pyx_f_4dnet___route_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1148; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; +/* "dnet.pyx":768 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.arp: + * arp_close(self.arp) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_3arp_13__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_3arp_13__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_3arp_12__dealloc__(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.route.loop"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v__arg); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_callback); - Py_DECREF(__pyx_v_arg); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_5route___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_5route___iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_v_l; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_l = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1151 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1151; goto __pyx_L1;} - Py_DECREF(__pyx_v_l); - __pyx_v_l = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1152 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_loop); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1152; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n___iter_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1152; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1152; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_l); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1152; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1153 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; goto __pyx_L1;} - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_l); - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; +static void __pyx_pf_4dnet_3arp_12__dealloc__(struct __pyx_obj_4dnet_arp *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":769 + * + * def __dealloc__(self): + * if self.arp: # <<<<<<<<<<<<<< + * arp_close(self.arp) + * + */ + __pyx_t_1 = (__pyx_v_self->arp != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":770 + * def __dealloc__(self): + * if self.arp: + * arp_close(self.arp) # <<<<<<<<<<<<<< + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, + */ + (void)(arp_close(__pyx_v_self->arp)); + + /* "dnet.pyx":769 + * + * def __dealloc__(self): + * if self.arp: # <<<<<<<<<<<<<< + * arp_close(self.arp) + * + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.route.__iter__"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_l); - Py_DECREF(__pyx_v_self); + /* "dnet.pyx":768 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.arp: + * arp_close(self.arp) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_3arp_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3arp_14__reduce_cython__(((struct __pyx_obj_4dnet_arp *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_5route___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_5route___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_3arp_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_arp *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.arp.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1156 */ - __pyx_1 = (((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route != 0); - if (__pyx_1) { +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3arp_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_3arp_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3arp_16__setstate_cython__(((struct __pyx_obj_4dnet_arp *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1157 */ - route_close(((struct __pyx_obj_4dnet_route *)__pyx_v_self)->route); - goto __pyx_L2; - } - __pyx_L2:; +static PyObject *__pyx_pf_4dnet_3arp_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_arp *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.arp.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.route.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); -} - -static PyObject *__pyx_n_device; -static PyObject *__pyx_n_op; -static PyObject *__pyx_n_dir; -static PyObject *__pyx_n_proto; -static PyObject *__pyx_n_src; -static PyObject *__pyx_n_dst; -static PyObject *__pyx_n_sport; -static PyObject *__pyx_n_dport; - - -static PyObject *__pyx_f_4dnet_rule_to_dict(struct fw_rule (*__pyx_v_rule)) { - PyObject *__pyx_v_d; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - int __pyx_4; - PyObject *__pyx_5 = 0; - __pyx_v_d = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1190 */ - __pyx_1 = PyDict_New(); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1190; goto __pyx_L1;} - Py_DECREF(__pyx_v_d); - __pyx_v_d = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1191 */ - __pyx_1 = PyBytes_FromString(__pyx_v_rule->fw_device); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1191; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_device, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1191; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1192 */ - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_op); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_op, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1192; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1193 */ - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_dir); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1193; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_dir, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1193; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1194 */ - __pyx_2 = (__pyx_v_rule->fw_proto != 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1195 */ - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_proto); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; goto __pyx_L1;} - if (PyObject_SetItem(__pyx_v_d, __pyx_n_proto, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1195; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1196 */ - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_src.addr_type); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; goto __pyx_L1;} - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; goto __pyx_L1;} - if (__pyx_2 = PyObject_RichCompareBool(__pyx_1, __pyx_3, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1196; goto __pyx_L1;} - __pyx_2 = __pyx_2 != 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1197 */ - __pyx_1 = PyBytes_FromString(addr_ntoa((&__pyx_v_rule->fw_src))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1197; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1197; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1); - __pyx_1 = 0; - __pyx_1 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_3, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1197; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_src, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1197; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L3; +/* "dnet.pyx":772 + * arp_close(self.arp) + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, # <<<<<<<<<<<<<< + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_29arp_pack_hdr_ethip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_28arp_pack_hdr_ethip[] = "Return a packed binary string representing an Ethernet/IP ARP message.\n \n Keyword arguments:\n op -- operation (ARP_OP_*)\t\t\t(16-bit integer)\n sha -- sender Ethernet address\t\t(6-byte binary string)\n spa -- sender IP address\t\t\t(4-byte binary string)\n dha -- destination Ethernet address\t\t(6-byte binary string)\n dpa -- destination IP address\t\t(4-byte binary string)\n "; +static PyMethodDef __pyx_mdef_4dnet_29arp_pack_hdr_ethip = {"arp_pack_hdr_ethip", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_29arp_pack_hdr_ethip, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_28arp_pack_hdr_ethip}; +static PyObject *__pyx_pw_4dnet_29arp_pack_hdr_ethip(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_op = 0; + PyObject *__pyx_v_sha = 0; + PyObject *__pyx_v_spa = 0; + PyObject *__pyx_v_dha = 0; + PyObject *__pyx_v_dpa = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("arp_pack_hdr_ethip (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_op,&__pyx_n_s_sha,&__pyx_n_s_spa,&__pyx_n_s_dha,&__pyx_n_s_dpa,0}; + PyObject* values[5] = {0,0,0,0,0}; + values[0] = __pyx_k__23; + values[1] = __pyx_k__24; + values[2] = __pyx_k__25; + values[3] = __pyx_k__26; + values[4] = __pyx_k__27; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op); + if (value) { values[0] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sha); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_spa); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dha); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dpa); + if (value) { values[4] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "arp_pack_hdr_ethip") < 0)) __PYX_ERR(0, 772, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_op = values[0]; + __pyx_v_sha = values[1]; + __pyx_v_spa = values[2]; + __pyx_v_dha = values[3]; + __pyx_v_dpa = values[4]; } - __pyx_L3:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("arp_pack_hdr_ethip", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 772, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.arp_pack_hdr_ethip", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_28arp_pack_hdr_ethip(__pyx_self, __pyx_v_op, __pyx_v_sha, __pyx_v_spa, __pyx_v_dha, __pyx_v_dpa); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1198 */ - __pyx_3 = PyLong_FromLong(__pyx_v_rule->fw_dst.addr_type); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1198; goto __pyx_L1;} - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1198; goto __pyx_L1;} - if (__pyx_2 = PyObject_RichCompareBool(__pyx_3, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1198; goto __pyx_L1;} - __pyx_2 = __pyx_2 != 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1199 */ - __pyx_3 = PyBytes_FromString(addr_ntoa((&__pyx_v_rule->fw_dst))); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; goto __pyx_L1;} - __pyx_1 = PyTuple_New(1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3); - __pyx_3 = 0; - __pyx_3 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet_addr), __pyx_1, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_dst, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1199; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - goto __pyx_L4; - } - __pyx_L4:; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1200 */ - __pyx_2 = ((__pyx_v_rule->fw_sport[0]) == 0); - if (__pyx_2) { - __pyx_2 = ((__pyx_v_rule->fw_sport[1]) == 0); - } - __pyx_4 = (!__pyx_2); - if (__pyx_4) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1201 */ - __pyx_1 = PyLong_FromLong((__pyx_v_rule->fw_sport[0])); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} - __pyx_3 = PyLong_FromLong((__pyx_v_rule->fw_sport[1])); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} - __pyx_5 = PyList_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} - PyList_SET_ITEM(__pyx_5, 0, __pyx_1); - PyList_SET_ITEM(__pyx_5, 1, __pyx_3); - __pyx_1 = 0; - __pyx_3 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_sport, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1201; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - goto __pyx_L5; - } - __pyx_L5:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1202 */ - __pyx_2 = ((__pyx_v_rule->fw_dport[0]) == 0); - if (__pyx_2) { - __pyx_2 = ((__pyx_v_rule->fw_dport[1]) == 0); - } - __pyx_4 = (!__pyx_2); - if (__pyx_4) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1203 */ - __pyx_1 = PyLong_FromLong((__pyx_v_rule->fw_dport[0])); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} - __pyx_3 = PyLong_FromLong((__pyx_v_rule->fw_dport[1])); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} - __pyx_5 = PyList_New(2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} - PyList_SET_ITEM(__pyx_5, 0, __pyx_1); - PyList_SET_ITEM(__pyx_5, 1, __pyx_3); - __pyx_1 = 0; - __pyx_3 = 0; - if (PyObject_SetItem(__pyx_v_d, __pyx_n_dport, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1203; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - goto __pyx_L6; - } - __pyx_L6:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1204 */ - Py_INCREF(__pyx_v_d); - __pyx_r = __pyx_v_d; +static PyObject *__pyx_pf_4dnet_28arp_pack_hdr_ethip(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_op, PyObject *__pyx_v_sha, PyObject *__pyx_v_spa, PyObject *__pyx_v_dha, PyObject *__pyx_v_dpa) { + char __pyx_v_buf[28]; + eth_addr_t __pyx_v_sh; + eth_addr_t __pyx_v_dh; + ip_addr_t __pyx_v_sp; + ip_addr_t __pyx_v_dp; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("arp_pack_hdr_ethip", 0); + + /* "dnet.pyx":787 + * cdef eth_addr_t sh, dh + * cdef ip_addr_t sp, dp + * __memcpy(sh.data, sha, 6) # <<<<<<<<<<<<<< + * __memcpy(dh.data, dha, 6) + * __memcpy(&sp, spa, 4) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_sh.data, __pyx_v_sha, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":788 + * cdef ip_addr_t sp, dp + * __memcpy(sh.data, sha, 6) + * __memcpy(dh.data, dha, 6) # <<<<<<<<<<<<<< + * __memcpy(&sp, spa, 4) + * __memcpy(&dp, dpa, 4) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(__pyx_v_dh.data, __pyx_v_dha, 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":789 + * __memcpy(sh.data, sha, 6) + * __memcpy(dh.data, dha, 6) + * __memcpy(&sp, spa, 4) # <<<<<<<<<<<<<< + * __memcpy(&dp, dpa, 4) + * __arp_pack_hdr_ethip(buf, op, sh, sp, dh, dp) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_sp)), __pyx_v_spa, 4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":790 + * __memcpy(dh.data, dha, 6) + * __memcpy(&sp, spa, 4) + * __memcpy(&dp, dpa, 4) # <<<<<<<<<<<<<< + * __arp_pack_hdr_ethip(buf, op, sh, sp, dh, dp) + * return PyBytes_FromStringAndSize(buf, 28) + */ + __pyx_t_1 = __pyx_f_4dnet___memcpy(((char *)(&__pyx_v_dp)), __pyx_v_dpa, 4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":791 + * __memcpy(&sp, spa, 4) + * __memcpy(&dp, dpa, 4) + * __arp_pack_hdr_ethip(buf, op, sh, sp, dh, dp) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, 28) + * + */ + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_op); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 791, __pyx_L1_error) + arp_pack_hdr_ethip(__pyx_v_buf, __pyx_t_2, __pyx_v_sh, __pyx_v_sp, __pyx_v_dh, __pyx_v_dp); + + /* "dnet.pyx":792 + * __memcpy(&dp, dpa, 4) + * __arp_pack_hdr_ethip(buf, op, sh, sp, dh, dp) + * return PyBytes_FromStringAndSize(buf, 28) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_buf, 28); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 792, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_5); - __Pyx_AddTraceback("dnet.rule_to_dict"); - __pyx_r = 0; + /* "dnet.pyx":772 + * arp_close(self.arp) + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, # <<<<<<<<<<<<<< + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.arp_pack_hdr_ethip", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_d); - return __pyx_r; -} - - -static PyObject *__pyx_f_4dnet_dict_to_rule(PyObject *__pyx_v_d,struct fw_rule (*__pyx_v_rule)) { - PyObject *__pyx_v_s; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - char (*__pyx_2); - int __pyx_3; - PyObject *__pyx_4 = 0; - PyObject *__pyx_5 = 0; - Py_INCREF(__pyx_v_d); - __pyx_v_s = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1207 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_device); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1207; goto __pyx_L1;} - Py_DECREF(__pyx_v_s); - __pyx_v_s = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1208 */ - __pyx_2 = PyBytes_AsString(__pyx_v_s); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1208; goto __pyx_L1;} - strlcpy(__pyx_v_rule->fw_device,__pyx_2,16); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1209 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_op); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1209; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1209; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_v_rule->fw_op = __pyx_3; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1210 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_dir); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1210; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_v_rule->fw_dir = __pyx_3; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1211 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_proto); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1211; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1212 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_proto); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; goto __pyx_L1;} - __pyx_3 = PyLong_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1212; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_v_rule->fw_proto = __pyx_3; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1213 */ - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_proto); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_IP_PROTO_TCP); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - if (!__pyx_3) { - __pyx_1 = PyLong_FromLong(__pyx_v_rule->fw_proto); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_IP_PROTO_UDP); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - if (__pyx_3 = PyObject_RichCompareBool(__pyx_1, __pyx_4, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1213; goto __pyx_L1;} - __pyx_3 = __pyx_3 == 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - } - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1214 */ - (__pyx_v_rule->fw_sport[1]) = 65535; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1215 */ - (__pyx_v_rule->fw_dport[1]) = 65535; - goto __pyx_L3; - } - __pyx_L3:; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1216 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_src); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1216; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1217 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_src); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1217; goto __pyx_L1;} - __pyx_v_rule->fw_src = ((struct __pyx_obj_4dnet_addr *)__pyx_1)->_addr; - Py_DECREF(__pyx_1); __pyx_1 = 0; - goto __pyx_L4; - } - __pyx_L4:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1218 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_dst); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1218; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1219 */ - __pyx_4 = PyObject_GetItem(__pyx_v_d, __pyx_n_dst); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1219; goto __pyx_L1;} - __pyx_v_rule->fw_dst = ((struct __pyx_obj_4dnet_addr *)__pyx_4)->_addr; - Py_DECREF(__pyx_4); __pyx_4 = 0; - goto __pyx_L5; - } - __pyx_L5:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1220 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_sport); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1220; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1221 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_sport); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} - __pyx_4 = PyLong_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyLong_AsLong(__pyx_5); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1221; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - (__pyx_v_rule->fw_sport[0]) = __pyx_3; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1222 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_sport); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} - __pyx_4 = PyLong_FromLong(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyLong_AsLong(__pyx_5); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1222; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - (__pyx_v_rule->fw_sport[1]) = __pyx_3; - goto __pyx_L6; - } - __pyx_L6:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1223 */ - __pyx_3 = PySequence_Contains(__pyx_v_d, __pyx_n_dport); if (__pyx_3 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1223; goto __pyx_L1;} - if (__pyx_3) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1224 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_dport); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} - __pyx_4 = PyLong_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyLong_AsLong(__pyx_5); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1224; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - (__pyx_v_rule->fw_dport[0]) = __pyx_3; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1225 */ - __pyx_1 = PyObject_GetItem(__pyx_v_d, __pyx_n_dport); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; goto __pyx_L1;} - __pyx_4 = PyLong_FromLong(1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; goto __pyx_L1;} - __pyx_5 = PyObject_GetItem(__pyx_1, __pyx_4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_4); __pyx_4 = 0; - __pyx_3 = PyLong_AsLong(__pyx_5); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1225; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - (__pyx_v_rule->fw_dport[1]) = __pyx_3; - goto __pyx_L7; +/* "dnet.pyx":800 + * void __icmp_pack_hdr "icmp_pack_hdr" (char *hdr, int type, int code) + * + * def icmp_pack_hdr(itype, code): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an ICMP header. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_31icmp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_30icmp_pack_hdr[] = "Return a packed binary string representing an ICMP header.\n\n Keyword arguments:\n itype -- ICMP type\t\t(8-bit integer)\n code -- ICMP code\t\t(8-bit integer)\n "; +static PyMethodDef __pyx_mdef_4dnet_31icmp_pack_hdr = {"icmp_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_31icmp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_30icmp_pack_hdr}; +static PyObject *__pyx_pw_4dnet_31icmp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_itype = 0; + PyObject *__pyx_v_code = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("icmp_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_itype,&__pyx_n_s_code,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itype)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("icmp_pack_hdr", 1, 2, 2, 1); __PYX_ERR(0, 800, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "icmp_pack_hdr") < 0)) __PYX_ERR(0, 800, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_itype = values[0]; + __pyx_v_code = values[1]; } - __pyx_L7:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("icmp_pack_hdr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 800, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.icmp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_30icmp_pack_hdr(__pyx_self, __pyx_v_itype, __pyx_v_code); - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_4); - Py_XDECREF(__pyx_5); - __Pyx_AddTraceback("dnet.dict_to_rule"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_s); - Py_DECREF(__pyx_v_d); + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet___fw_callback(struct fw_rule (*__pyx_v_rule),void (*__pyx_v_arg)) { - PyObject *__pyx_v_f; - PyObject *__pyx_v_a; - PyObject *__pyx_v_ret; - int __pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - int __pyx_4; - int __pyx_5; - __pyx_v_f = Py_None; Py_INCREF(Py_None); - __pyx_v_a = Py_None; Py_INCREF(Py_None); - __pyx_v_ret = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1228 */ - __pyx_1 = (PyObject *)__pyx_v_arg; - Py_INCREF(__pyx_1); - __pyx_2 = __Pyx_UnpackItem(__pyx_1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1228; goto __pyx_L1;} - Py_DECREF(__pyx_v_f); - __pyx_v_f = __pyx_2; - __pyx_2 = 0; - __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1228; goto __pyx_L1;} - Py_DECREF(__pyx_v_a); - __pyx_v_a = __pyx_3; - __pyx_3 = 0; - if (__Pyx_EndUnpack(__pyx_1, 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1228; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1229 */ - __pyx_2 = __pyx_f_4dnet_rule_to_dict(__pyx_v_rule); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_a); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_a); - __pyx_2 = 0; - __pyx_1 = PyObject_Call(__pyx_v_f, __pyx_3, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1229; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1230 */ - __pyx_4 = PyObject_IsTrue(__pyx_v_ret); if (__pyx_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1230; goto __pyx_L1;} - __pyx_5 = (!__pyx_4); - if (__pyx_5) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1231 */ - __pyx_2 = PyLong_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1231; goto __pyx_L1;} - Py_DECREF(__pyx_v_ret); - __pyx_v_ret = __pyx_2; - __pyx_2 = 0; - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1232 */ - __pyx_4 = PyLong_AsLong(__pyx_v_ret); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1232; goto __pyx_L1;} - __pyx_r = __pyx_4; +static PyObject *__pyx_pf_4dnet_30icmp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_itype, PyObject *__pyx_v_code) { + char __pyx_v_buf[4]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("icmp_pack_hdr", 0); + + /* "dnet.pyx":808 + * """ + * cdef char buf[4] + * __icmp_pack_hdr(buf, itype, code) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) + * + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_itype); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 808, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_code); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 808, __pyx_L1_error) + icmp_pack_hdr(__pyx_v_buf, __pyx_t_1, __pyx_t_2); + + /* "dnet.pyx":809 + * cdef char buf[4] + * __icmp_pack_hdr(buf, itype, code) + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyBytes_FromStringAndSize(__pyx_v_buf, (sizeof(__pyx_v_buf))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 809, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.__fw_callback"); - __pyx_r = -1; + /* "dnet.pyx":800 + * void __icmp_pack_hdr "icmp_pack_hdr" (char *hdr, int type, int code) + * + * def icmp_pack_hdr(itype, code): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an ICMP header. + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.icmp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_f); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_ret); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_2fw___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_2fw___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1242 */ - ((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw = fw_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1243 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1244 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1244; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; +/* "dnet.pyx":860 + * TCP_OPT_MAX = 27 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, # <<<<<<<<<<<<<< + * win=TCP_WIN_MAX, urp=0): + * """Return a packed binary string representing a TCP header. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_33tcp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_32tcp_pack_hdr[] = "Return a packed binary string representing a TCP header.\n\n Keyword arguments:\n sport -- source port\t\t(16-bit integer)\n dport -- destination port\t\t(16-bit integer)\n seq -- sequence number\t\t(32-bit integer)\n ack -- acknowledgment number\t(32-bit integer)\n flags -- control flags (TH_*)\t(8-bit integer bitmask)\n win -- window size\t\t(16-bit integer)\n urp -- urgent pointer\t\t(16-bit integer)\n "; +static PyMethodDef __pyx_mdef_4dnet_33tcp_pack_hdr = {"tcp_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_33tcp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_32tcp_pack_hdr}; +static PyObject *__pyx_pw_4dnet_33tcp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_sport = 0; + PyObject *__pyx_v_dport = 0; + PyObject *__pyx_v_seq = 0; + PyObject *__pyx_v_ack = 0; + PyObject *__pyx_v_flags = 0; + PyObject *__pyx_v_win = 0; + PyObject *__pyx_v_urp = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("tcp_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sport,&__pyx_n_s_dport,&__pyx_n_s_seq,&__pyx_n_s_ack,&__pyx_n_s_flags,&__pyx_n_s_win,&__pyx_n_s_urp,0}; + PyObject* values[7] = {0,0,0,0,0,0,0}; + values[2] = ((PyObject *)__pyx_int_1); + values[3] = ((PyObject *)__pyx_int_0); + values[4] = __pyx_k__28; + values[5] = __pyx_k__29; + values[6] = ((PyObject *)__pyx_int_0); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sport)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dport)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("tcp_pack_hdr", 0, 2, 7, 1); __PYX_ERR(0, 860, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_seq); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ack); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_win); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_urp); + if (value) { values[6] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "tcp_pack_hdr") < 0)) __PYX_ERR(0, 860, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_sport = values[0]; + __pyx_v_dport = values[1]; + __pyx_v_seq = values[2]; + __pyx_v_ack = values[3]; + __pyx_v_flags = values[4]; + __pyx_v_win = values[5]; + __pyx_v_urp = values[6]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("tcp_pack_hdr", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 860, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.tcp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_32tcp_pack_hdr(__pyx_self, __pyx_v_sport, __pyx_v_dport, __pyx_v_seq, __pyx_v_ack, __pyx_v_flags, __pyx_v_win, __pyx_v_urp); - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.fw.__init__"); - __pyx_r = -1; - __pyx_L0:; - Py_DECREF(__pyx_v_self); + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_2fw_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_2fw_add[] = "Add a firewall rule specified as a dict.\n\n Dict values:\n device -- interface name (string)\n op -- operation (FW_OP_*) (integer)\n dir -- direction (FW_DIR_*) (integer)\n proto -- IP protocol (IP_PROTO_*) (integer)\n src -- source address / net (addr object)\n dst -- destination address / net (addr object)\n sport -- source port range or ICMP type/mask (list of 2 integers)\n dport -- dest port range or ICMP code/mask (list of 2 integers)\n "; -static PyObject *__pyx_f_4dnet_2fw_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_d = 0; - struct fw_rule __pyx_v_rule; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"d",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_d)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_d); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1260 */ - memset(((char (*))(&__pyx_v_rule)),0,(sizeof(__pyx_v_rule))); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1261 */ - __pyx_1 = __pyx_f_4dnet_dict_to_rule(__pyx_v_d,(&__pyx_v_rule)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1261; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1262 */ - __pyx_2 = (fw_add(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw,(&__pyx_v_rule)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1263 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1263; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1263; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_3, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1263; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_32tcp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sport, PyObject *__pyx_v_dport, PyObject *__pyx_v_seq, PyObject *__pyx_v_ack, PyObject *__pyx_v_flags, PyObject *__pyx_v_win, PyObject *__pyx_v_urp) { + char __pyx_v_buf[20]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + unsigned long __pyx_t_3; + unsigned long __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("tcp_pack_hdr", 0); + + /* "dnet.pyx":874 + * """ + * cdef char buf[20] + * __tcp_pack_hdr(buf, sport, dport, seq, ack, flags, win, urp) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) + * + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_sport); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_dport); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_unsigned_long(__pyx_v_seq); if (unlikely((__pyx_t_3 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_As_unsigned_long(__pyx_v_ack); if (unlikely((__pyx_t_4 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_flags); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_win); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_urp); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 874, __pyx_L1_error) + tcp_pack_hdr(__pyx_v_buf, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7); + + /* "dnet.pyx":875 + * cdef char buf[20] + * __tcp_pack_hdr(buf, sport, dport, seq, ack, flags, win, urp) + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_8 = PyBytes_FromStringAndSize(__pyx_v_buf, (sizeof(__pyx_v_buf))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.fw.add"); - __pyx_r = 0; + + /* "dnet.pyx":860 + * TCP_OPT_MAX = 27 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, # <<<<<<<<<<<<<< + * win=TCP_WIN_MAX, urp=0): + * """Return a packed binary string representing a TCP header. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dnet.tcp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_d); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_2fw_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_2fw_delete[] = "Delete a firewall rule specified as a dict."; -static PyObject *__pyx_f_4dnet_2fw_delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_d = 0; - struct fw_rule __pyx_v_rule; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"d",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_d)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_d); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1268 */ - memset(((char (*))(&__pyx_v_rule)),0,(sizeof(__pyx_v_rule))); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1269 */ - __pyx_1 = __pyx_f_4dnet_dict_to_rule(__pyx_v_d,(&__pyx_v_rule)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1270 */ - __pyx_2 = (fw_delete(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw,(&__pyx_v_rule)) < 0); - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1271 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; goto __pyx_L1;} - __Pyx_Raise(__pyx_1, __pyx_3, 0); - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1271; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.fw.delete"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_d); +/* "dnet.pyx":886 + * UDP_PORT_MAX = 65535 + * + * def udp_pack_hdr(sport, dport, ulen=UDP_HDR_LEN): # <<<<<<<<<<<<<< + * """Return a packed binary string representing a UDP header. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_35udp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_34udp_pack_hdr[] = "Return a packed binary string representing a UDP header.\n\n Keyword arguments:\n sport -- source port\t\t(16-bit integer)\n dport -- destination port\t\t(16-bit integer)\n ulen -- UDP header + data length\t(16-bit integer)\n "; +static PyMethodDef __pyx_mdef_4dnet_35udp_pack_hdr = {"udp_pack_hdr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_35udp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_34udp_pack_hdr}; +static PyObject *__pyx_pw_4dnet_35udp_pack_hdr(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_sport = 0; + PyObject *__pyx_v_dport = 0; + PyObject *__pyx_v_ulen = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("udp_pack_hdr (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sport,&__pyx_n_s_dport,&__pyx_n_s_ulen,0}; + PyObject* values[3] = {0,0,0}; + values[2] = __pyx_k__30; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sport)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dport)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("udp_pack_hdr", 0, 2, 3, 1); __PYX_ERR(0, 886, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ulen); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "udp_pack_hdr") < 0)) __PYX_ERR(0, 886, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_sport = values[0]; + __pyx_v_dport = values[1]; + __pyx_v_ulen = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("udp_pack_hdr", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 886, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.udp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_34udp_pack_hdr(__pyx_self, __pyx_v_sport, __pyx_v_dport, __pyx_v_ulen); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_2fw_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_2fw_loop[] = "Iterate over the local firewall ruleset, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with (dict, arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; -static PyObject *__pyx_f_4dnet_2fw_loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_callback = 0; - PyObject *__pyx_v_arg = 0; - PyObject *__pyx_v__arg; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {"callback","arg",0}; - __pyx_v_arg = __pyx_k57; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_callback, &__pyx_v_arg)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_callback); - Py_INCREF(__pyx_v_arg); - __pyx_v__arg = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1283 */ - __pyx_1 = PyTuple_New(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1283; goto __pyx_L1;} - Py_INCREF(__pyx_v_callback); - PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_callback); - Py_INCREF(__pyx_v_arg); - PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_arg); - Py_DECREF(__pyx_v__arg); - __pyx_v__arg = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1284 */ - __pyx_1 = PyLong_FromLong(fw_loop(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw,__pyx_f_4dnet___fw_callback,((void (*))__pyx_v__arg))); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1284; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.fw.loop"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v__arg); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_callback); - Py_DECREF(__pyx_v_arg); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_2fw___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_2fw___iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_v_l; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - Py_INCREF(__pyx_v_self); - __pyx_v_l = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1287 */ - __pyx_1 = PyList_New(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1287; goto __pyx_L1;} - Py_DECREF(__pyx_v_l); - __pyx_v_l = __pyx_1; - __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1288 */ - __pyx_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_loop); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n___iter_append); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} - __pyx_3 = PyTuple_New(2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2); - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_l); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1288; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1289 */ - __pyx_1 = __Pyx_GetName(__pyx_b, __pyx_n_iter); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} - __pyx_3 = PyTuple_New(1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} - Py_INCREF(__pyx_v_l); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_l); - __pyx_2 = PyObject_Call(__pyx_1, __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1289; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; +static PyObject *__pyx_pf_4dnet_34udp_pack_hdr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_sport, PyObject *__pyx_v_dport, PyObject *__pyx_v_ulen) { + char __pyx_v_buf[8]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("udp_pack_hdr", 0); + + /* "dnet.pyx":895 + * """ + * cdef char buf[8] + * __udp_pack_hdr(buf, sport, dport, ulen) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) + * + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_sport); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_dport); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_ulen); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L1_error) + udp_pack_hdr(__pyx_v_buf, __pyx_t_1, __pyx_t_2, __pyx_t_3); + + /* "dnet.pyx":896 + * cdef char buf[8] + * __udp_pack_hdr(buf, sport, dport, ulen) + * return PyBytes_FromStringAndSize(buf, sizeof(buf)) # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = PyBytes_FromStringAndSize(__pyx_v_buf, (sizeof(__pyx_v_buf))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 896, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.fw.__iter__"); - __pyx_r = 0; + /* "dnet.pyx":886 + * UDP_PORT_MAX = 65535 + * + * def udp_pack_hdr(sport, dport, ulen=UDP_HDR_LEN): # <<<<<<<<<<<<<< + * """Return a packed binary string representing a UDP header. + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.udp_pack_hdr", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_l); - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_2fw___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_2fw___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":937 + * INTF_FLAG_MULTICAST = 0x20 # /[inserted by cython to avoid comment start]* supports multicast (r/o) *[inserted by cython to avoid comment closer]/ + * + * cdef object ifent_to_dict(intf_entry *entry): # <<<<<<<<<<<<<< + * d = {} + * d['name'] = entry.intf_name + */ + +static PyObject *__pyx_f_4dnet_ifent_to_dict(struct intf_entry *__pyx_v_entry) { + PyObject *__pyx_v_d = NULL; + PyObject *__pyx_v_l = NULL; + long __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + unsigned int __pyx_t_5; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("ifent_to_dict", 0); + + /* "dnet.pyx":938 + * + * cdef object ifent_to_dict(intf_entry *entry): + * d = {} # <<<<<<<<<<<<<< + * d['name'] = entry.intf_name + * d['type'] = entry.intf_type + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 938, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_d = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":939 + * cdef object ifent_to_dict(intf_entry *entry): + * d = {} + * d['name'] = entry.intf_name # <<<<<<<<<<<<<< + * d['type'] = entry.intf_type + * d['flags'] = entry.intf_flags + */ + __pyx_t_1 = __Pyx_PyObject_FromString(__pyx_v_entry->intf_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 939, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_name, __pyx_t_1) < 0)) __PYX_ERR(0, 939, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":940 + * d = {} + * d['name'] = entry.intf_name + * d['type'] = entry.intf_type # <<<<<<<<<<<<<< + * d['flags'] = entry.intf_flags + * d['mtu'] = entry.intf_mtu + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_entry->intf_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 940, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_type, __pyx_t_1) < 0)) __PYX_ERR(0, 940, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":941 + * d['name'] = entry.intf_name + * d['type'] = entry.intf_type + * d['flags'] = entry.intf_flags # <<<<<<<<<<<<<< + * d['mtu'] = entry.intf_mtu + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_entry->intf_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 941, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_flags, __pyx_t_1) < 0)) __PYX_ERR(0, 941, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":942 + * d['type'] = entry.intf_type + * d['flags'] = entry.intf_flags + * d['mtu'] = entry.intf_mtu # <<<<<<<<<<<<<< + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_entry->intf_mtu); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 942, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_mtu, __pyx_t_1) < 0)) __PYX_ERR(0, 942, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":943 + * d['flags'] = entry.intf_flags + * d['mtu'] = entry.intf_mtu + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_entry->intf_addr.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_4) { + + /* "dnet.pyx":944 + * d['mtu'] = entry.intf_mtu + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) # <<<<<<<<<<<<<< + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + */ + __pyx_t_3 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_entry->intf_addr))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_addr, __pyx_t_2) < 0)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "dnet.pyx":943 + * d['flags'] = entry.intf_flags + * d['mtu'] = entry.intf_mtu + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1292 */ - __pyx_1 = (((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw != 0); - if (__pyx_1) { + /* "dnet.pyx":945 + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + */ + __pyx_t_2 = __Pyx_PyInt_From_unsigned_short(__pyx_v_entry->intf_dst_addr.addr_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 945, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 945, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 945, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 945, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_4) { + + /* "dnet.pyx":946 + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) # <<<<<<<<<<<<<< + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + */ + __pyx_t_1 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_entry->intf_dst_addr))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_dst_addr, __pyx_t_3) < 0)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":945 + * if entry.intf_addr.addr_type != ADDR_TYPE_NONE: + * d['addr'] = addr(addr_ntoa(&entry.intf_addr)) + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1293 */ - fw_close(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)->fw); - goto __pyx_L2; + /* "dnet.pyx":947 + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + * if entry.intf_alias_num > 0: + */ + __pyx_t_3 = __Pyx_PyInt_From_unsigned_short(__pyx_v_entry->intf_link_addr.addr_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_4) { + + /* "dnet.pyx":948 + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) # <<<<<<<<<<<<<< + * if entry.intf_alias_num > 0: + * l = [] + */ + __pyx_t_2 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_entry->intf_link_addr))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_link_addr, __pyx_t_1) < 0)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":947 + * if entry.intf_dst_addr.addr_type != ADDR_TYPE_NONE: + * d['dst_addr'] = addr(addr_ntoa(&entry.intf_dst_addr)) + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + * if entry.intf_alias_num > 0: + */ } - __pyx_L2:; - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.fw.__dealloc__"); - __pyx_L0:; - Py_DECREF(__pyx_v_self); -} + /* "dnet.pyx":949 + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + * if entry.intf_alias_num > 0: # <<<<<<<<<<<<<< + * l = [] + * for i from 0 <= i < entry.intf_alias_num: + */ + __pyx_t_4 = ((__pyx_v_entry->intf_alias_num > 0) != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":950 + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + * if entry.intf_alias_num > 0: + * l = [] # <<<<<<<<<<<<<< + * for i from 0 <= i < entry.intf_alias_num: + * l.append(addr(addr_ntoa(&entry.intf_alias_addrs[i]))) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 950, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_l = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":951 + * if entry.intf_alias_num > 0: + * l = [] + * for i from 0 <= i < entry.intf_alias_num: # <<<<<<<<<<<<<< + * l.append(addr(addr_ntoa(&entry.intf_alias_addrs[i]))) + * d['alias_addrs'] = l + */ + __pyx_t_5 = __pyx_v_entry->intf_alias_num; + for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) { + + /* "dnet.pyx":952 + * l = [] + * for i from 0 <= i < entry.intf_alias_num: + * l.append(addr(addr_ntoa(&entry.intf_alias_addrs[i]))) # <<<<<<<<<<<<<< + * d['alias_addrs'] = l + * return d + */ + __pyx_t_1 = __Pyx_PyStr_FromString(addr_ntoa((&(__pyx_v_entry->intf_alias_addrs[__pyx_v_i])))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 952, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_l, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 952, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } -static int __pyx_f_4dnet_4rand___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_4rand___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return -1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1322 */ - ((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand = rand_open(); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1323 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1324 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; + /* "dnet.pyx":953 + * for i from 0 <= i < entry.intf_alias_num: + * l.append(addr(addr_ntoa(&entry.intf_alias_addrs[i]))) + * d['alias_addrs'] = l # <<<<<<<<<<<<<< + * return d + * + */ + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_alias_addrs, __pyx_v_l) < 0)) __PYX_ERR(0, 953, __pyx_L1_error) + + /* "dnet.pyx":949 + * if entry.intf_link_addr.addr_type != ADDR_TYPE_NONE: + * d['link_addr'] = addr(addr_ntoa(&entry.intf_link_addr)) + * if entry.intf_alias_num > 0: # <<<<<<<<<<<<<< + * l = [] + * for i from 0 <= i < entry.intf_alias_num: + */ + } - __pyx_r = 0; + /* "dnet.pyx":954 + * l.append(addr(addr_ntoa(&entry.intf_alias_addrs[i]))) + * d['alias_addrs'] = l + * return d # <<<<<<<<<<<<<< + * + * cdef dict_to_ifent(object d, intf_entry *entry): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_d); + __pyx_r = __pyx_v_d; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.rand.__init__"); - __pyx_r = -1; + + /* "dnet.pyx":937 + * INTF_FLAG_MULTICAST = 0x20 # /[inserted by cython to avoid comment start]* supports multicast (r/o) *[inserted by cython to avoid comment closer]/ + * + * cdef object ifent_to_dict(intf_entry *entry): # <<<<<<<<<<<<<< + * d = {} + * d['name'] = entry.intf_name + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.ifent_to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XDECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_get[] = "Return a string of random bytes.\n \n Arguments:\n len -- number of random bytes to generate\n "; -static PyObject *__pyx_f_4dnet_4rand_get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_len = 0; - char (__pyx_v_buf[1024]); - char (*__pyx_v_p); - PyObject *__pyx_v_s; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - int __pyx_2; - static char *__pyx_argnames[] = {"len",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_len)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_len); - __pyx_v_s = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1334 */ - __pyx_1 = PyLong_FromLong(1024); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} - if (__pyx_2 = PyObject_RichCompareBool(__pyx_v_len, __pyx_1, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; goto __pyx_L1;} - __pyx_2 = __pyx_2 <= 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (__pyx_2) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1335 */ - __pyx_2 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1335; goto __pyx_L1;} - rand_get(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand,__pyx_v_buf,__pyx_2); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1336 */ - __pyx_2 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1336; goto __pyx_L1;} - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_buf,__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1336; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; - goto __pyx_L2; +/* "dnet.pyx":956 + * return d + * + * cdef dict_to_ifent(object d, intf_entry *entry): # <<<<<<<<<<<<<< + * s = d['name'] + * strlcpy(entry.intf_name, s, 16) + */ + +static PyObject *__pyx_f_4dnet_dict_to_ifent(PyObject *__pyx_v_d, struct intf_entry *__pyx_v_entry) { + PyObject *__pyx_v_s = NULL; + long __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + char *__pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + unsigned short __pyx_t_5; + unsigned int __pyx_t_6; + struct addr __pyx_t_7; + Py_ssize_t __pyx_t_8; + PyObject *__pyx_t_9 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("dict_to_ifent", 0); + + /* "dnet.pyx":957 + * + * cdef dict_to_ifent(object d, intf_entry *entry): + * s = d['name'] # <<<<<<<<<<<<<< + * strlcpy(entry.intf_name, s, 16) + * if 'flags' in d: + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_s = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dnet.pyx":958 + * cdef dict_to_ifent(object d, intf_entry *entry): + * s = d['name'] + * strlcpy(entry.intf_name, s, 16) # <<<<<<<<<<<<<< + * if 'flags' in d: + * entry.intf_flags = d['flags'] + */ + __pyx_t_2 = __Pyx_PyObject_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 958, __pyx_L1_error) + (void)(strlcpy(__pyx_v_entry->intf_name, __pyx_t_2, 16)); + + /* "dnet.pyx":959 + * s = d['name'] + * strlcpy(entry.intf_name, s, 16) + * if 'flags' in d: # <<<<<<<<<<<<<< + * entry.intf_flags = d['flags'] + * if 'mtu' in d: + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_flags, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 959, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":960 + * strlcpy(entry.intf_name, s, 16) + * if 'flags' in d: + * entry.intf_flags = d['flags'] # <<<<<<<<<<<<<< + * if 'mtu' in d: + * entry.intf_mtu = d['mtu'] + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyInt_As_unsigned_short(__pyx_t_1); if (unlikely((__pyx_t_5 == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_flags = __pyx_t_5; + + /* "dnet.pyx":959 + * s = d['name'] + * strlcpy(entry.intf_name, s, 16) + * if 'flags' in d: # <<<<<<<<<<<<<< + * entry.intf_flags = d['flags'] + * if 'mtu' in d: + */ + } + + /* "dnet.pyx":961 + * if 'flags' in d: + * entry.intf_flags = d['flags'] + * if 'mtu' in d: # <<<<<<<<<<<<<< + * entry.intf_mtu = d['mtu'] + * if 'addr' in d: + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_mtu, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 961, __pyx_L1_error) + __pyx_t_3 = (__pyx_t_4 != 0); + if (__pyx_t_3) { + + /* "dnet.pyx":962 + * entry.intf_flags = d['flags'] + * if 'mtu' in d: + * entry.intf_mtu = d['mtu'] # <<<<<<<<<<<<<< + * if 'addr' in d: + * entry.intf_addr = (d['addr'])._addr + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_mtu); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 962, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_mtu = __pyx_t_6; + + /* "dnet.pyx":961 + * if 'flags' in d: + * entry.intf_flags = d['flags'] + * if 'mtu' in d: # <<<<<<<<<<<<<< + * entry.intf_mtu = d['mtu'] + * if 'addr' in d: + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1337 */ - __pyx_2 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1337; goto __pyx_L1;} - __pyx_v_p = malloc(__pyx_2); + /* "dnet.pyx":963 + * if 'mtu' in d: + * entry.intf_mtu = d['mtu'] + * if 'addr' in d: # <<<<<<<<<<<<<< + * entry.intf_addr = (d['addr'])._addr + * if 'dst_addr' in d: + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_addr, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 963, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":964 + * entry.intf_mtu = d['mtu'] + * if 'addr' in d: + * entry.intf_addr = (d['addr'])._addr # <<<<<<<<<<<<<< + * if 'dst_addr' in d: + * entry.intf_dst_addr = (d['dst_addr'])._addr + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_addr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1)->_addr; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_addr = __pyx_t_7; + + /* "dnet.pyx":963 + * if 'mtu' in d: + * entry.intf_mtu = d['mtu'] + * if 'addr' in d: # <<<<<<<<<<<<<< + * entry.intf_addr = (d['addr'])._addr + * if 'dst_addr' in d: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1338 */ - __pyx_2 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1338; goto __pyx_L1;} - rand_get(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand,__pyx_v_p,__pyx_2); + /* "dnet.pyx":965 + * if 'addr' in d: + * entry.intf_addr = (d['addr'])._addr + * if 'dst_addr' in d: # <<<<<<<<<<<<<< + * entry.intf_dst_addr = (d['dst_addr'])._addr + * if 'link_addr' in d: + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_dst_addr, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 965, __pyx_L1_error) + __pyx_t_3 = (__pyx_t_4 != 0); + if (__pyx_t_3) { + + /* "dnet.pyx":966 + * entry.intf_addr = (d['addr'])._addr + * if 'dst_addr' in d: + * entry.intf_dst_addr = (d['dst_addr'])._addr # <<<<<<<<<<<<<< + * if 'link_addr' in d: + * entry.intf_link_addr = (d['link_addr'])._addr + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_dst_addr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1)->_addr; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_dst_addr = __pyx_t_7; + + /* "dnet.pyx":965 + * if 'addr' in d: + * entry.intf_addr = (d['addr'])._addr + * if 'dst_addr' in d: # <<<<<<<<<<<<<< + * entry.intf_dst_addr = (d['dst_addr'])._addr + * if 'link_addr' in d: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1339 */ - __pyx_2 = PyLong_AsLong(__pyx_v_len); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; goto __pyx_L1;} - __pyx_1 = PyBytes_FromStringAndSize(__pyx_v_p,__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; goto __pyx_L1;} - Py_DECREF(__pyx_v_s); - __pyx_v_s = __pyx_1; - __pyx_1 = 0; + /* "dnet.pyx":967 + * if 'dst_addr' in d: + * entry.intf_dst_addr = (d['dst_addr'])._addr + * if 'link_addr' in d: # <<<<<<<<<<<<<< + * entry.intf_link_addr = (d['link_addr'])._addr + * if 'alias_addrs' in d: + */ + __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_link_addr, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 967, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_3 != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":968 + * entry.intf_dst_addr = (d['dst_addr'])._addr + * if 'link_addr' in d: + * entry.intf_link_addr = (d['link_addr'])._addr # <<<<<<<<<<<<<< + * if 'alias_addrs' in d: + * entry.intf_alias_num = len(d['alias_addrs']) + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_link_addr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1)->_addr; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_link_addr = __pyx_t_7; + + /* "dnet.pyx":967 + * if 'dst_addr' in d: + * entry.intf_dst_addr = (d['dst_addr'])._addr + * if 'link_addr' in d: # <<<<<<<<<<<<<< + * entry.intf_link_addr = (d['link_addr'])._addr + * if 'alias_addrs' in d: + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1340 */ - free(__pyx_v_p); + /* "dnet.pyx":969 + * if 'link_addr' in d: + * entry.intf_link_addr = (d['link_addr'])._addr + * if 'alias_addrs' in d: # <<<<<<<<<<<<<< + * entry.intf_alias_num = len(d['alias_addrs']) + * for i from 0 <= i < entry.intf_alias_num: + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_alias_addrs, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 969, __pyx_L1_error) + __pyx_t_3 = (__pyx_t_4 != 0); + if (__pyx_t_3) { + + /* "dnet.pyx":970 + * entry.intf_link_addr = (d['link_addr'])._addr + * if 'alias_addrs' in d: + * entry.intf_alias_num = len(d['alias_addrs']) # <<<<<<<<<<<<<< + * for i from 0 <= i < entry.intf_alias_num: + * entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_alias_addrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 970, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_entry->intf_alias_num = __pyx_t_8; + + /* "dnet.pyx":971 + * if 'alias_addrs' in d: + * entry.intf_alias_num = len(d['alias_addrs']) + * for i from 0 <= i < entry.intf_alias_num: # <<<<<<<<<<<<<< + * entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr + * + */ + __pyx_t_6 = __pyx_v_entry->intf_alias_num; + for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { + + /* "dnet.pyx":972 + * entry.intf_alias_num = len(d['alias_addrs']) + * for i from 0 <= i < entry.intf_alias_num: + * entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr # <<<<<<<<<<<<<< + * + * cdef int __intf_callback(intf_entry *entry, void *arg) except -1: + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_alias_addrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_9); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_7 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_9)->_addr; + __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; + (__pyx_v_entry->intf_alias_addrs[__pyx_v_i]) = __pyx_t_7; + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1341 */ - Py_INCREF(__pyx_v_s); - __pyx_r = __pyx_v_s; - goto __pyx_L0; + /* "dnet.pyx":969 + * if 'link_addr' in d: + * entry.intf_link_addr = (d['link_addr'])._addr + * if 'alias_addrs' in d: # <<<<<<<<<<<<<< + * entry.intf_alias_num = len(d['alias_addrs']) + * for i from 0 <= i < entry.intf_alias_num: + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":956 + * return d + * + * cdef dict_to_ifent(object d, intf_entry *entry): # <<<<<<<<<<<<<< + * s = d['name'] + * strlcpy(entry.intf_name, s, 16) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.rand.get"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("dnet.dict_to_ifent", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - Py_DECREF(__pyx_v_s); - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_len); + __Pyx_XDECREF(__pyx_v_s); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_set[] = "Initialize the PRNG from a known seed.\n \n Arguments:\n string -- binary string seed value\n "; -static PyObject *__pyx_f_4dnet_4rand_set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_r; - char (*__pyx_1); - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1349 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1349; goto __pyx_L1;} - rand_set(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand,__pyx_1,PyBytes_Size(__pyx_v_buf)); - - __pyx_r = Py_None; Py_INCREF(Py_None); +/* "dnet.pyx":974 + * entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr + * + * cdef int __intf_callback(intf_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * ret = f(ifent_to_dict(entry), a) + */ + +static int __pyx_f_4dnet___intf_callback(struct intf_entry *__pyx_v_entry, void *__pyx_v_arg) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_a = NULL; + PyObject *__pyx_v_ret = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__intf_callback", 0); + + /* "dnet.pyx":975 + * + * cdef int __intf_callback(intf_entry *entry, void *arg) except -1: + * f, a = arg # <<<<<<<<<<<<<< + * ret = f(ifent_to_dict(entry), a) + * if not ret: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_arg); + __Pyx_INCREF(__pyx_t_1); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 975, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 975, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 975, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 975, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 975, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 975, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_a = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":976 + * cdef int __intf_callback(intf_entry *entry, void *arg) except -1: + * f, a = arg + * ret = f(ifent_to_dict(entry), a) # <<<<<<<<<<<<<< + * if not ret: + * ret = 0 + */ + __pyx_t_3 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_entry); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 976, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_f); + __pyx_t_2 = __pyx_v_f; __pyx_t_4 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_a}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_a}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 976, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3); + __Pyx_INCREF(__pyx_v_a); + __Pyx_GIVEREF(__pyx_v_a); + PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_a); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_ret = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dnet.pyx":977 + * f, a = arg + * ret = f(ifent_to_dict(entry), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_ret); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 977, __pyx_L1_error) + __pyx_t_9 = ((!__pyx_t_8) != 0); + if (__pyx_t_9) { + + /* "dnet.pyx":978 + * ret = f(ifent_to_dict(entry), a) + * if not ret: + * ret = 0 # <<<<<<<<<<<<<< + * return ret + * + */ + __Pyx_INCREF(__pyx_int_0); + __Pyx_DECREF_SET(__pyx_v_ret, __pyx_int_0); + + /* "dnet.pyx":977 + * f, a = arg + * ret = f(ifent_to_dict(entry), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + } + + /* "dnet.pyx":979 + * if not ret: + * ret = 0 + * return ret # <<<<<<<<<<<<<< + * + * cdef class intf: + */ + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_ret); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 979, __pyx_L1_error) + __pyx_r = __pyx_t_6; goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.rand.set"); - __pyx_r = 0; + + /* "dnet.pyx":974 + * entry.intf_alias_addrs[i] = (d['alias_addrs'][i])._addr + * + * cdef int __intf_callback(intf_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * ret = f(ifent_to_dict(entry), a) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dnet.__intf_callback", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_a); + __Pyx_XDECREF(__pyx_v_ret); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_add[] = "Add additional entropy into the PRNG mix.\n\n Arguments:\n string -- binary string\n "; -static PyObject *__pyx_f_4dnet_4rand_add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_r; - char (*__pyx_1); - static char *__pyx_argnames[] = {"buf",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_buf)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_buf); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1357 */ - __pyx_1 = PyBytes_AsString(__pyx_v_buf); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1357; goto __pyx_L1;} - rand_add(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand,__pyx_1,PyBytes_Size(__pyx_v_buf)); - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.rand.add"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_buf); +/* "dnet.pyx":988 + * cdef intf_t *intf + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.intf = intf_open() + * if not self.intf: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4intf_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_4intf_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_4intf___init__(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_uint8(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_uint8[] = "Return a random 8-bit integer."; -static PyObject *__pyx_f_4dnet_4rand_uint8(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); +static int __pyx_pf_4dnet_4intf___init__(struct __pyx_obj_4dnet_intf *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":989 + * + * def __init__(self): + * self.intf = intf_open() # <<<<<<<<<<<<<< + * if not self.intf: + * raise OSError, __oserror() + */ + __pyx_v_self->intf = intf_open(); + + /* "dnet.pyx":990 + * def __init__(self): + * self.intf = intf_open() + * if not self.intf: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->intf != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":991 + * self.intf = intf_open() + * if not self.intf: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def get(self, name): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 991, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 991, __pyx_L1_error) + + /* "dnet.pyx":990 + * def __init__(self): + * self.intf = intf_open() + * if not self.intf: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1361 */ - __pyx_1 = PyLong_FromUnsignedLong(rand_uint8(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1361; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; + /* "dnet.pyx":988 + * cdef intf_t *intf + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.intf = intf_open() + * if not self.intf: + */ - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.rand.uint8"); + /* function exit code */ __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.intf.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":993 + * raise OSError, __oserror() + * + * def get(self, name): # <<<<<<<<<<<<<< + * """Return the configuration for a network interface as a dict. + * """ + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_3get(PyObject *__pyx_v_self, PyObject *__pyx_v_name); /*proto*/ +static char __pyx_doc_4dnet_4intf_2get[] = "Return the configuration for a network interface as a dict.\n "; +static PyObject *__pyx_pw_4dnet_4intf_3get(PyObject *__pyx_v_self, PyObject *__pyx_v_name) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4intf_2get(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), ((PyObject *)__pyx_v_name)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_uint16(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_uint16[] = "Return a random 16-bit integer."; -static PyObject *__pyx_f_4dnet_4rand_uint16(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_4intf_2get(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_name) { + struct intf_entry *__pyx_v_ifent; + char __pyx_v_buf[0x400]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get", 0); + + /* "dnet.pyx":998 + * cdef intf_entry *ifent + * cdef char buf[1024] + * ifent = buf # <<<<<<<<<<<<<< + * ifent.intf_len = 1024 + * strlcpy(ifent.intf_name, name, 16) + */ + __pyx_v_ifent = ((struct intf_entry *)__pyx_v_buf); + + /* "dnet.pyx":999 + * cdef char buf[1024] + * ifent = buf + * ifent.intf_len = 1024 # <<<<<<<<<<<<<< + * strlcpy(ifent.intf_name, name, 16) + * if intf_get(self.intf, ifent) < 0: + */ + __pyx_v_ifent->intf_len = 0x400; + + /* "dnet.pyx":1000 + * ifent = buf + * ifent.intf_len = 1024 + * strlcpy(ifent.intf_name, name, 16) # <<<<<<<<<<<<<< + * if intf_get(self.intf, ifent) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_name); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1000, __pyx_L1_error) + (void)(strlcpy(__pyx_v_ifent->intf_name, __pyx_t_1, 16)); + + /* "dnet.pyx":1001 + * ifent.intf_len = 1024 + * strlcpy(ifent.intf_name, name, 16) + * if intf_get(self.intf, ifent) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ + __pyx_t_2 = ((intf_get(__pyx_v_self->intf, __pyx_v_ifent) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1002 + * strlcpy(ifent.intf_name, name, 16) + * if intf_get(self.intf, ifent) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * return ifent_to_dict(ifent) + * + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1002, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 1002, __pyx_L1_error) + + /* "dnet.pyx":1001 + * ifent.intf_len = 1024 + * strlcpy(ifent.intf_name, name, 16) + * if intf_get(self.intf, ifent) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1365 */ - __pyx_1 = PyLong_FromUnsignedLong(rand_uint16(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1365; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + /* "dnet.pyx":1003 + * if intf_get(self.intf, ifent) < 0: + * raise OSError, __oserror() + * return ifent_to_dict(ifent) # <<<<<<<<<<<<<< + * + * def get_src(self, addr src): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1003, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":993 + * raise OSError, __oserror() + * + * def get(self, name): # <<<<<<<<<<<<<< + * """Return the configuration for a network interface as a dict. + * """ + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.intf.get", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1005 + * return ifent_to_dict(ifent) + * + * def get_src(self, addr src): # <<<<<<<<<<<<<< + * """Return the configuration for the interface whose primary address + * matches the specified source address. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_5get_src(PyObject *__pyx_v_self, PyObject *__pyx_v_src); /*proto*/ +static char __pyx_doc_4dnet_4intf_4get_src[] = "Return the configuration for the interface whose primary address\n matches the specified source address.\n "; +static PyObject *__pyx_pw_4dnet_4intf_5get_src(PyObject *__pyx_v_self, PyObject *__pyx_v_src) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_src (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_src), __pyx_ptype_4dnet_addr, 1, "src", 0))) __PYX_ERR(0, 1005, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4intf_4get_src(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_src)); + + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.rand.uint16"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_uint32(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_uint32[] = "Return a random 32-bit integer."; -static PyObject *__pyx_f_4dnet_4rand_uint32(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_4intf_4get_src(struct __pyx_obj_4dnet_intf *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_src) { + struct intf_entry *__pyx_v_ifent; + char __pyx_v_buf[0x400]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_src", 0); + + /* "dnet.pyx":1011 + * cdef intf_entry *ifent + * cdef char buf[1024] + * ifent = buf # <<<<<<<<<<<<<< + * ifent.intf_len = 1024 + * if intf_get_src(self.intf, ifent, &src._addr) < 0: + */ + __pyx_v_ifent = ((struct intf_entry *)__pyx_v_buf); + + /* "dnet.pyx":1012 + * cdef char buf[1024] + * ifent = buf + * ifent.intf_len = 1024 # <<<<<<<<<<<<<< + * if intf_get_src(self.intf, ifent, &src._addr) < 0: + * raise OSError, __oserror() + */ + __pyx_v_ifent->intf_len = 0x400; + + /* "dnet.pyx":1013 + * ifent = buf + * ifent.intf_len = 1024 + * if intf_get_src(self.intf, ifent, &src._addr) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ + __pyx_t_1 = ((intf_get_src(__pyx_v_self->intf, __pyx_v_ifent, (&__pyx_v_src->_addr)) < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1014 + * ifent.intf_len = 1024 + * if intf_get_src(self.intf, ifent, &src._addr) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * return ifent_to_dict(ifent) + * + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1014, __pyx_L1_error) + + /* "dnet.pyx":1013 + * ifent = buf + * ifent.intf_len = 1024 + * if intf_get_src(self.intf, ifent, &src._addr) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1369 */ - __pyx_1 = PyLong_FromUnsignedLong(rand_uint32(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1369; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; + /* "dnet.pyx":1015 + * if intf_get_src(self.intf, ifent, &src._addr) < 0: + * raise OSError, __oserror() + * return ifent_to_dict(ifent) # <<<<<<<<<<<<<< + * + * def get_dst(self, addr dst): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.rand.uint32"); - __pyx_r = 0; + /* "dnet.pyx":1005 + * return ifent_to_dict(ifent) + * + * def get_src(self, addr src): # <<<<<<<<<<<<<< + * """Return the configuration for the interface whose primary address + * matches the specified source address. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.intf.get_src", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_4rand_xrange(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_4rand_xrange[] = "xrange([start,] stop) -> xrange object\n\n Return a random permutation iterator to walk an unsigned integer range,\n like xrange().\n "; -static PyObject *__pyx_f_4dnet_4rand_xrange(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_start = 0; - PyObject *__pyx_v_stop = 0; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"start","stop",0}; - __pyx_v_stop = __pyx_k58; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|O", __pyx_argnames, &__pyx_v_start, &__pyx_v_stop)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_start); - Py_INCREF(__pyx_v_stop); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1377 */ - if (__pyx_1 = PyObject_RichCompareBool(__pyx_v_stop, Py_None, Py_EQ) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1377; goto __pyx_L1;} - __pyx_1 = __pyx_1 == 0; - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1378 */ - __pyx_2 = PyLong_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; goto __pyx_L1;} - __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; goto __pyx_L1;} - Py_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2); - Py_INCREF(__pyx_v_start); - PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_start); - __pyx_2 = 0; - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet___rand_xrange), __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1378; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; - goto __pyx_L2; - } - /*else*/ { +/* "dnet.pyx":1017 + * return ifent_to_dict(ifent) + * + * def get_dst(self, addr dst): # <<<<<<<<<<<<<< + * """Return the configuration for the best interface with which to + * reach the specified dst address. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_7get_dst(PyObject *__pyx_v_self, PyObject *__pyx_v_dst); /*proto*/ +static char __pyx_doc_4dnet_4intf_6get_dst[] = "Return the configuration for the best interface with which to\n reach the specified dst address.\n "; +static PyObject *__pyx_pw_4dnet_4intf_7get_dst(PyObject *__pyx_v_self, PyObject *__pyx_v_dst) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get_dst (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst", 0))) __PYX_ERR(0, 1017, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_4intf_6get_dst(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_dst)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1380 */ - __pyx_3 = PyTuple_New(3); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; goto __pyx_L1;} - Py_INCREF(__pyx_v_self); - PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_self); - Py_INCREF(__pyx_v_start); - PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_start); - Py_INCREF(__pyx_v_stop); - PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_stop); - __pyx_2 = PyObject_Call(((PyObject*)__pyx_ptype_4dnet___rand_xrange), __pyx_3, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1380; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; +static PyObject *__pyx_pf_4dnet_4intf_6get_dst(struct __pyx_obj_4dnet_intf *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst) { + struct intf_entry *__pyx_v_ifent; + char __pyx_v_buf[0x400]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get_dst", 0); + + /* "dnet.pyx":1023 + * cdef intf_entry *ifent + * cdef char buf[1024] + * ifent = buf # <<<<<<<<<<<<<< + * ifent.intf_len = 1024 + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: + */ + __pyx_v_ifent = ((struct intf_entry *)__pyx_v_buf); + + /* "dnet.pyx":1024 + * cdef char buf[1024] + * ifent = buf + * ifent.intf_len = 1024 # <<<<<<<<<<<<<< + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: + * raise OSError, __oserror() + */ + __pyx_v_ifent->intf_len = 0x400; + + /* "dnet.pyx":1025 + * ifent = buf + * ifent.intf_len = 1024 + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ + __pyx_t_1 = ((intf_get_dst(__pyx_v_self->intf, __pyx_v_ifent, (&__pyx_v_dst->_addr)) < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1026 + * ifent.intf_len = 1024 + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * return ifent_to_dict(ifent) + * + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1026, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1026, __pyx_L1_error) + + /* "dnet.pyx":1025 + * ifent = buf + * ifent.intf_len = 1024 + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return ifent_to_dict(ifent) + */ } - __pyx_L2:; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":1027 + * if intf_get_dst(self.intf, ifent, &dst._addr) < 0: + * raise OSError, __oserror() + * return ifent_to_dict(ifent) # <<<<<<<<<<<<<< + * + * def set(self, d): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __pyx_f_4dnet_ifent_to_dict(__pyx_v_ifent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1027, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.rand.xrange"); - __pyx_r = 0; + + /* "dnet.pyx":1017 + * return ifent_to_dict(ifent) + * + * def get_dst(self, addr dst): # <<<<<<<<<<<<<< + * """Return the configuration for the best interface with which to + * reach the specified dst address. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.intf.get_dst", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_start); - Py_DECREF(__pyx_v_stop); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_4rand___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_4rand___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1383 */ - __pyx_1 = (((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand != 0); - if (__pyx_1) { +/* "dnet.pyx":1029 + * return ifent_to_dict(ifent) + * + * def set(self, d): # <<<<<<<<<<<<<< + * """Set the configuration for an interface from a dict. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_9set(PyObject *__pyx_v_self, PyObject *__pyx_v_d); /*proto*/ +static char __pyx_doc_4dnet_4intf_8set[] = "Set the configuration for an interface from a dict.\n\n Dict values:\n name -- name of interface to set\t\t(string)\n flags -- interface flags (INTF_FLAG_*)\t(integer bitmask)\n mtu -- interface MTU\t\t\t(integer)\n addr -- primary network address\t\t(addr object)\n dst_addr -- point-to-point dst address\t(addr object)\n link_addr -- link-layer address\t\t(addr object)\n alias_addrs -- additional network addresses\t(list of addr objects)\n "; +static PyObject *__pyx_pw_4dnet_4intf_9set(PyObject *__pyx_v_self, PyObject *__pyx_v_d) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4intf_8set(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), ((PyObject *)__pyx_v_d)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1384 */ - rand_close(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)->rand); - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_4intf_8set(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_d) { + struct intf_entry *__pyx_v_ifent; + char __pyx_v_buf[0x400]; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("set", 0); + + /* "dnet.pyx":1043 + * cdef intf_entry *ifent + * cdef char buf[1024] + * memset(buf, 0, sizeof(buf)) # <<<<<<<<<<<<<< + * ifent = buf + * ifent.intf_len = 1024 + */ + (void)(memset(__pyx_v_buf, 0, (sizeof(__pyx_v_buf)))); + + /* "dnet.pyx":1044 + * cdef char buf[1024] + * memset(buf, 0, sizeof(buf)) + * ifent = buf # <<<<<<<<<<<<<< + * ifent.intf_len = 1024 + * dict_to_ifent(d, ifent) + */ + __pyx_v_ifent = ((struct intf_entry *)__pyx_v_buf); + + /* "dnet.pyx":1045 + * memset(buf, 0, sizeof(buf)) + * ifent = buf + * ifent.intf_len = 1024 # <<<<<<<<<<<<<< + * dict_to_ifent(d, ifent) + * if intf_set(self.intf, ifent) < 0: + */ + __pyx_v_ifent->intf_len = 0x400; + + /* "dnet.pyx":1046 + * ifent = buf + * ifent.intf_len = 1024 + * dict_to_ifent(d, ifent) # <<<<<<<<<<<<<< + * if intf_set(self.intf, ifent) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_f_4dnet_dict_to_ifent(__pyx_v_d, __pyx_v_ifent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1047 + * ifent.intf_len = 1024 + * dict_to_ifent(d, ifent) + * if intf_set(self.intf, ifent) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((intf_set(__pyx_v_self->intf, __pyx_v_ifent) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1048 + * dict_to_ifent(d, ifent) + * if intf_set(self.intf, ifent) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def loop(self, callback, arg=None): + */ + __pyx_t_1 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1048, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 1048, __pyx_L1_error) + + /* "dnet.pyx":1047 + * ifent.intf_len = 1024 + * dict_to_ifent(d, ifent) + * if intf_set(self.intf, ifent) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ } - __pyx_L2:; + /* "dnet.pyx":1029 + * return ifent_to_dict(ifent) + * + * def set(self, d): # <<<<<<<<<<<<<< + * """Set the configuration for an interface from a dict. + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.rand.__dealloc__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.intf.set", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static PyObject *__pyx_k118p; -static PyObject *__pyx_k119p; - -static char (__pyx_k118[]) = "start must be an integer"; -static char (__pyx_k119[]) = "stop must be an integer"; +/* "dnet.pyx":1050 + * raise OSError, __oserror() + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system interface table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_11loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_4intf_10loop[] = "Iterate over the system interface table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with (dict, arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; +static PyObject *__pyx_pw_4dnet_4intf_11loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_callback = 0; + PyObject *__pyx_v_arg = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("loop (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback,&__pyx_n_s_arg,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_callback)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loop") < 0)) __PYX_ERR(0, 1050, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_callback = values[0]; + __pyx_v_arg = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("loop", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1050, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.intf.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_4intf_10loop(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), __pyx_v_callback, __pyx_v_arg); -static int __pyx_f_4dnet_13__rand_xrange___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_13__rand_xrange___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_r = 0; - PyObject *__pyx_v_start = 0; - PyObject *__pyx_v_stop = 0; - unsigned int __pyx_v_bits; - int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {"r","start","stop",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOO", __pyx_argnames, &__pyx_v_r, &__pyx_v_start, &__pyx_v_stop)) return -1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_r); - Py_INCREF(__pyx_v_start); - Py_INCREF(__pyx_v_stop); + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1402 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->rand = ((struct __pyx_obj_4dnet_rand *)__pyx_v_r)->rand; +static PyObject *__pyx_pf_4dnet_4intf_10loop(struct __pyx_obj_4dnet_intf *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg) { + PyObject *__pyx_v__arg = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("loop", 0); + + /* "dnet.pyx":1060 + * arg -- optional callback argument + * """ + * _arg = (callback, arg) # <<<<<<<<<<<<<< + * return intf_loop(self.intf, __intf_callback, _arg) + * + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_callback); + __Pyx_GIVEREF(__pyx_v_callback); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_callback); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_arg); + __pyx_v__arg = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1061 + * """ + * _arg = (callback, arg) + * return intf_loop(self.intf, __intf_callback, _arg) # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(intf_loop(__pyx_v_self->intf, __pyx_f_4dnet___intf_callback, ((void *)__pyx_v__arg))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1403 */ - __pyx_1 = PyLong_Check(__pyx_v_start); - if (__pyx_1) { + /* "dnet.pyx":1050 + * raise OSError, __oserror() + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system interface table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.intf.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v__arg); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1404 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->start = PyLong_AsLong(__pyx_v_start); - goto __pyx_L2; - } - __pyx_1 = PyLong_Check(__pyx_v_start); - if (__pyx_1) { +/* "dnet.pyx":1063 + * return intf_loop(self.intf, __intf_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_13__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_4intf_13__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4intf_12__iter__(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1406 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->start = PyLong_AsUnsignedLong(__pyx_v_start); - goto __pyx_L2; +static PyObject *__pyx_pf_4dnet_4intf_12__iter__(struct __pyx_obj_4dnet_intf *__pyx_v_self) { + PyObject *__pyx_v_l = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":1064 + * + * def __iter__(self): + * l = [] # <<<<<<<<<<<<<< + * self.loop(__iter_append, l) + * return iter(l) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_l = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1065 + * def __iter__(self): + * l = [] + * self.loop(__iter_append, l) # <<<<<<<<<<<<<< + * return iter(l) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_iter_append); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } } - /*else*/ { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1408 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_k118p, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1408; goto __pyx_L1;} + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_l); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1065, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } - __pyx_L2:; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1066 + * l = [] + * self.loop(__iter_append, l) + * return iter(l) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1066, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1410 */ - __pyx_1 = PyLong_Check(__pyx_v_start); - if (__pyx_1) { + /* "dnet.pyx":1063 + * return intf_loop(self.intf, __intf_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("dnet.intf.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1411 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max = (PyLong_AsLong(__pyx_v_stop) - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->start); - goto __pyx_L3; - } - __pyx_1 = PyLong_Check(__pyx_v_start); - if (__pyx_1) { +/* "dnet.pyx":1068 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.intf: + * intf_close(self.intf) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_4intf_15__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_4intf_15__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_4intf_14__dealloc__(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1413 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max = (PyLong_AsUnsignedLong(__pyx_v_stop) - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->start); - goto __pyx_L3; +static void __pyx_pf_4dnet_4intf_14__dealloc__(struct __pyx_obj_4dnet_intf *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":1069 + * + * def __dealloc__(self): + * if self.intf: # <<<<<<<<<<<<<< + * intf_close(self.intf) + * + */ + __pyx_t_1 = (__pyx_v_self->intf != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1070 + * def __dealloc__(self): + * if self.intf: + * intf_close(self.intf) # <<<<<<<<<<<<<< + * + * # + */ + (void)(intf_close(__pyx_v_self->intf)); + + /* "dnet.pyx":1069 + * + * def __dealloc__(self): + * if self.intf: # <<<<<<<<<<<<<< + * intf_close(self.intf) + * + */ } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1415 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_TypeError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_k119p, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1415; goto __pyx_L1;} - } - __pyx_L3:; + /* "dnet.pyx":1068 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.intf: + * intf_close(self.intf) + */ - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1418 */ - rand_get(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->rand,((char (*))((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sbox),(sizeof(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sbox))); + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1420 */ - __pyx_v_bits = 0; +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_17__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_4intf_17__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4intf_16__reduce_cython__(((struct __pyx_obj_4dnet_intf *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1421 */ - while (1) { - __pyx_L4:; - __pyx_1 = (((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max > (1 << __pyx_v_bits)); - if (!__pyx_1) break; +static PyObject *__pyx_pf_4dnet_4intf_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_intf *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.intf.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1422 */ - __pyx_v_bits = (__pyx_v_bits + 1); - } - __pyx_L5:; +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4intf_19__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_4intf_19__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4intf_18__setstate_cython__(((struct __pyx_obj_4dnet_intf *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1424 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left = (__pyx_v_bits / 2); +static PyObject *__pyx_pf_4dnet_4intf_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_intf *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.intf.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1425 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->right = (__pyx_v_bits - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left); +/* "dnet.pyx":1090 + * route_t *route_close(route_t *route) + * + * cdef int __route_callback(route_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * dst, gw = addr(), addr() + */ + +static int __pyx_f_4dnet___route_callback(struct route_entry *__pyx_v_entry, void *__pyx_v_arg) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_a = NULL; + struct __pyx_obj_4dnet_addr *__pyx_v_dst = NULL; + struct __pyx_obj_4dnet_addr *__pyx_v_gw = NULL; + PyObject *__pyx_v_ret = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + struct addr __pyx_t_6; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + int __pyx_t_9; + int __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__route_callback", 0); + + /* "dnet.pyx":1091 + * + * cdef int __route_callback(route_entry *entry, void *arg) except -1: + * f, a = arg # <<<<<<<<<<<<<< + * dst, gw = addr(), addr() + * (dst)._addr = entry.route_dst + */ + __pyx_t_1 = ((PyObject *)__pyx_v_arg); + __Pyx_INCREF(__pyx_t_1); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1091, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1091, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1091, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1091, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1091, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1091, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_a = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":1092 + * cdef int __route_callback(route_entry *entry, void *arg) except -1: + * f, a = arg + * dst, gw = addr(), addr() # <<<<<<<<<<<<<< + * (dst)._addr = entry.route_dst + * (gw)._addr = entry.route_gw + */ + __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_4dnet_addr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1092, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_v_dst = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1); + __pyx_t_1 = 0; + __pyx_v_gw = ((struct __pyx_obj_4dnet_addr *)__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":1093 + * f, a = arg + * dst, gw = addr(), addr() + * (dst)._addr = entry.route_dst # <<<<<<<<<<<<<< + * (gw)._addr = entry.route_gw + * ret = f((dst, gw), a) + */ + __pyx_t_6 = __pyx_v_entry->route_dst; + __pyx_v_dst->_addr = __pyx_t_6; + + /* "dnet.pyx":1094 + * dst, gw = addr(), addr() + * (dst)._addr = entry.route_dst + * (gw)._addr = entry.route_gw # <<<<<<<<<<<<<< + * ret = f((dst, gw), a) + * if not ret: + */ + __pyx_t_6 = __pyx_v_entry->route_gw; + __pyx_v_gw->_addr = __pyx_t_6; + + /* "dnet.pyx":1095 + * (dst)._addr = entry.route_dst + * (gw)._addr = entry.route_gw + * ret = f((dst, gw), a) # <<<<<<<<<<<<<< + * if not ret: + * ret = 0 + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1095, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)__pyx_v_dst)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_dst)); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_dst)); + __Pyx_INCREF(((PyObject *)__pyx_v_gw)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_gw)); + PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_gw)); + __Pyx_INCREF(__pyx_v_f); + __pyx_t_2 = __pyx_v_f; __pyx_t_4 = NULL; + __pyx_t_7 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_7 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_a}; + __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_a}; + __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else + #endif + { + __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1095, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1); + __Pyx_INCREF(__pyx_v_a); + __Pyx_GIVEREF(__pyx_v_a); + PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_a); + __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_ret = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":1096 + * (gw)._addr = entry.route_gw + * ret = f((dst, gw), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_ret); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1096, __pyx_L1_error) + __pyx_t_10 = ((!__pyx_t_9) != 0); + if (__pyx_t_10) { + + /* "dnet.pyx":1097 + * ret = f((dst, gw), a) + * if not ret: + * ret = 0 # <<<<<<<<<<<<<< + * return ret + * + */ + __Pyx_INCREF(__pyx_int_0); + __Pyx_DECREF_SET(__pyx_v_ret, __pyx_int_0); + + /* "dnet.pyx":1096 + * (gw)._addr = entry.route_gw + * ret = f((dst, gw), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1426 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->mask = ((1 << __pyx_v_bits) - 1); + /* "dnet.pyx":1098 + * if not ret: + * ret = 0 + * return ret # <<<<<<<<<<<<<< + * + * cdef class route: + */ + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_ret); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1098, __pyx_L1_error) + __pyx_r = __pyx_t_7; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1428 */ - __pyx_1 = (__pyx_e_4dnet_TEASBOXSIZE < (1 << ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left)); - if (__pyx_1) { + /* "dnet.pyx":1090 + * route_t *route_close(route_t *route) + * + * cdef int __route_callback(route_entry *entry, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * dst, gw = addr(), addr() + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dnet.__route_callback", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_a); + __Pyx_XDECREF((PyObject *)__pyx_v_dst); + __Pyx_XDECREF((PyObject *)__pyx_v_gw); + __Pyx_XDECREF(__pyx_v_ret); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1429 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sboxmask = (__pyx_e_4dnet_TEASBOXSIZE - 1); +/* "dnet.pyx":1107 + * cdef route_t *route + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.route = route_open() + * if not self.route: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_5route_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_5route_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_5route___init__(((struct __pyx_obj_4dnet_route *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1430 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->kshift = __pyx_e_4dnet_TEASBOXSHIFT; - goto __pyx_L6; +static int __pyx_pf_4dnet_5route___init__(struct __pyx_obj_4dnet_route *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":1108 + * + * def __init__(self): + * self.route = route_open() # <<<<<<<<<<<<<< + * if not self.route: + * raise OSError, __oserror() + */ + __pyx_v_self->route = route_open(); + + /* "dnet.pyx":1109 + * def __init__(self): + * self.route = route_open() + * if not self.route: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->route != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1110 + * self.route = route_open() + * if not self.route: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def add(self, addr dst, addr gw): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1110, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1110, __pyx_L1_error) + + /* "dnet.pyx":1109 + * def __init__(self): + * self.route = route_open() + * if not self.route: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ } - /*else*/ { - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1432 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sboxmask = ((1 << ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left) - 1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1433 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->kshift = ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left; - } - __pyx_L6:; + /* "dnet.pyx":1107 + * cdef route_t *route + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.route = route_open() + * if not self.route: + */ + /* function exit code */ __pyx_r = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.__rand_xrange.__init__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.route.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_r); - Py_DECREF(__pyx_v_start); - Py_DECREF(__pyx_v_stop); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_13__rand_xrange___iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_13__rand_xrange___iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1436 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->cur = 0; - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->enc = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1438 */ - Py_INCREF(__pyx_v_self); - __pyx_r = __pyx_v_self; - goto __pyx_L0; +/* "dnet.pyx":1112 + * raise OSError, __oserror() + * + * def add(self, addr dst, addr gw): # <<<<<<<<<<<<<< + * """Add an entry to the system routing table. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_5route_2add[] = "Add an entry to the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n gw -- ADDR_TYPE_IP network address object\n "; +static PyObject *__pyx_pw_4dnet_5route_3add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; + struct __pyx_obj_4dnet_addr *__pyx_v_gw = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("add (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dst,&__pyx_n_s_gw,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dst)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gw)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, 1); __PYX_ERR(0, 1112, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "add") < 0)) __PYX_ERR(0, 1112, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_dst = ((struct __pyx_obj_4dnet_addr *)values[0]); + __pyx_v_gw = ((struct __pyx_obj_4dnet_addr *)values[1]); + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1112, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.route.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst", 0))) __PYX_ERR(0, 1112, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gw), __pyx_ptype_4dnet_addr, 1, "gw", 0))) __PYX_ERR(0, 1112, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_5route_2add(((struct __pyx_obj_4dnet_route *)__pyx_v_self), __pyx_v_dst, __pyx_v_gw); - __pyx_r = Py_None; Py_INCREF(Py_None); + /* function exit code */ goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.__rand_xrange.__iter__"); - __pyx_r = 0; + __pyx_L1_error:; + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static Py_ssize_t __pyx_f_4dnet_13__rand_xrange___len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_f_4dnet_13__rand_xrange___len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_5route_2add(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst, struct __pyx_obj_4dnet_addr *__pyx_v_gw) { + struct route_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("add", 0); + + /* "dnet.pyx":1120 + * """ + * cdef route_entry entry + * entry.route_dst = dst._addr # <<<<<<<<<<<<<< + * entry.route_gw = gw._addr + * if route_add(self.route, &entry) < 0: + */ + __pyx_t_1 = __pyx_v_dst->_addr; + __pyx_v_entry.route_dst = __pyx_t_1; + + /* "dnet.pyx":1121 + * cdef route_entry entry + * entry.route_dst = dst._addr + * entry.route_gw = gw._addr # <<<<<<<<<<<<<< + * if route_add(self.route, &entry) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_v_gw->_addr; + __pyx_v_entry.route_gw = __pyx_t_1; + + /* "dnet.pyx":1122 + * entry.route_dst = dst._addr + * entry.route_gw = gw._addr + * if route_add(self.route, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((route_add(__pyx_v_self->route, (&__pyx_v_entry)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1123 + * entry.route_gw = gw._addr + * if route_add(self.route, &entry) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def delete(self, addr dst): + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 1123, __pyx_L1_error) + + /* "dnet.pyx":1122 + * entry.route_dst = dst._addr + * entry.route_gw = gw._addr + * if route_add(self.route, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1441 */ - __pyx_r = ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max; - goto __pyx_L0; + /* "dnet.pyx":1112 + * raise OSError, __oserror() + * + * def add(self, addr dst, addr gw): # <<<<<<<<<<<<<< + * """Add an entry to the system routing table. + * + */ - __pyx_r = 0; + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.__rand_xrange.__len__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.route.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_13__rand_xrange___next__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_13__rand_xrange___next__(PyObject *__pyx_v_self) { - unsigned long __pyx_v_c; - unsigned long __pyx_v_sum; - PyObject *__pyx_v_i; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - long __pyx_3; - Py_INCREF(__pyx_v_self); - __pyx_v_i = Py_None; Py_INCREF(Py_None); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1446 */ - __pyx_1 = (((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->cur == ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1447 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_StopIteration); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, 0, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1447; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1448 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->cur = (((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->cur + 1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1449 */ - while (1) { - __pyx_L3:; - __pyx_3 = 1; - if (!__pyx_3) break; +/* "dnet.pyx":1125 + * raise OSError, __oserror() + * + * def delete(self, addr dst): # <<<<<<<<<<<<<< + * """Delete an entry from the system routing table. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_dst); /*proto*/ +static char __pyx_doc_4dnet_5route_4delete[] = "Delete an entry from the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n "; +static PyObject *__pyx_pw_4dnet_5route_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_dst) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("delete (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst", 0))) __PYX_ERR(0, 1125, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_5route_4delete(((struct __pyx_obj_4dnet_route *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_dst)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1450 */ - __pyx_v_c = ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->enc; +static PyObject *__pyx_pf_4dnet_5route_4delete(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst) { + struct route_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("delete", 0); + + /* "dnet.pyx":1132 + * """ + * cdef route_entry entry + * entry.route_dst = dst._addr # <<<<<<<<<<<<<< + * if route_delete(self.route, &entry) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_v_dst->_addr; + __pyx_v_entry.route_dst = __pyx_t_1; + + /* "dnet.pyx":1133 + * cdef route_entry entry + * entry.route_dst = dst._addr + * if route_delete(self.route, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((route_delete(__pyx_v_self->route, (&__pyx_v_entry)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1134 + * entry.route_dst = dst._addr + * if route_delete(self.route, &entry) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def get(self, addr dst): + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 1134, __pyx_L1_error) + + /* "dnet.pyx":1133 + * cdef route_entry entry + * entry.route_dst = dst._addr + * if route_delete(self.route, &entry) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1451 */ - ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->enc = (((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->enc + 1); + /* "dnet.pyx":1125 + * raise OSError, __oserror() + * + * def delete(self, addr dst): # <<<<<<<<<<<<<< + * """Delete an entry from the system routing table. + * + */ - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1452 */ - __pyx_v_sum = 0; + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.route.delete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1453 */ - for (__pyx_3 = 0+1; __pyx_3 < __pyx_e_4dnet_TEAROUNDS; ++__pyx_3) { - __pyx_2 = PyLong_FromLong(__pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1453; goto __pyx_L1;} - Py_DECREF(__pyx_v_i); - __pyx_v_i = __pyx_2; - __pyx_2 = 0; +/* "dnet.pyx":1136 + * raise OSError, __oserror() + * + * def get(self, addr dst): # <<<<<<<<<<<<<< + * """Return the hardware address for a given protocol address + * in the system routing table. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_7get(PyObject *__pyx_v_self, PyObject *__pyx_v_dst); /*proto*/ +static char __pyx_doc_4dnet_5route_6get[] = "Return the hardware address for a given protocol address\n in the system routing table.\n\n Arguments:\n dst -- ADDR_TYPE_IP network address object\n "; +static PyObject *__pyx_pw_4dnet_5route_7get(PyObject *__pyx_v_self, PyObject *__pyx_v_dst) { + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get (wrapper)", 0); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst", 0))) __PYX_ERR(0, 1136, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_5route_6get(((struct __pyx_obj_4dnet_route *)__pyx_v_self), ((struct __pyx_obj_4dnet_addr *)__pyx_v_dst)); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1454 */ - __pyx_v_sum = (__pyx_v_sum + __pyx_e_4dnet_TEADELTA); +static PyObject *__pyx_pf_4dnet_5route_6get(struct __pyx_obj_4dnet_route *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_dst) { + struct route_entry __pyx_v_entry; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + struct addr __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get", 0); + + /* "dnet.pyx":1144 + * """ + * cdef route_entry entry + * entry.route_dst = dst._addr # <<<<<<<<<<<<<< + * if route_get(self.route, &entry) == 0: + * return addr(addr_ntoa(&entry.route_gw)) + */ + __pyx_t_1 = __pyx_v_dst->_addr; + __pyx_v_entry.route_dst = __pyx_t_1; + + /* "dnet.pyx":1145 + * cdef route_entry entry + * entry.route_dst = dst._addr + * if route_get(self.route, &entry) == 0: # <<<<<<<<<<<<<< + * return addr(addr_ntoa(&entry.route_gw)) + * return None + */ + __pyx_t_2 = ((route_get(__pyx_v_self->route, (&__pyx_v_entry)) == 0) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1146 + * entry.route_dst = dst._addr + * if route_get(self.route, &entry) == 0: + * return addr(addr_ntoa(&entry.route_gw)) # <<<<<<<<<<<<<< + * return None + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_entry.route_gw))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1455 */ - __pyx_v_c = (__pyx_v_c ^ ((((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sbox[((__pyx_v_c ^ __pyx_v_sum) & ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->sboxmask)]) << ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->kshift)); + /* "dnet.pyx":1145 + * cdef route_entry entry + * entry.route_dst = dst._addr + * if route_get(self.route, &entry) == 0: # <<<<<<<<<<<<<< + * return addr(addr_ntoa(&entry.route_gw)) + * return None + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1456 */ - __pyx_v_c = (__pyx_v_c + __pyx_v_sum); + /* "dnet.pyx":1147 + * if route_get(self.route, &entry) == 0: + * return addr(addr_ntoa(&entry.route_gw)) + * return None # <<<<<<<<<<<<<< + * + * def loop(self, callback, arg=None): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1457 */ - __pyx_v_c = (__pyx_v_c & ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->mask); + /* "dnet.pyx":1136 + * raise OSError, __oserror() + * + * def get(self, addr dst): # <<<<<<<<<<<<<< + * """Return the hardware address for a given protocol address + * in the system routing table. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.route.get", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1458 */ - __pyx_v_c = (((__pyx_v_c << ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->left) | (__pyx_v_c >> ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->right)) & ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->mask); - __pyx_L5:; +/* "dnet.pyx":1149 + * return None + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system routing table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_9loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_5route_8loop[] = "Iterate over the system routing table, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with ((dst, gw), arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; +static PyObject *__pyx_pw_4dnet_5route_9loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_callback = 0; + PyObject *__pyx_v_arg = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("loop (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback,&__pyx_n_s_arg,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_callback)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loop") < 0)) __PYX_ERR(0, 1149, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } } - __pyx_L6:; + __pyx_v_callback = values[0]; + __pyx_v_arg = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("loop", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1149, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.route.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_5route_8loop(((struct __pyx_obj_4dnet_route *)__pyx_v_self), __pyx_v_callback, __pyx_v_arg); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_5route_8loop(struct __pyx_obj_4dnet_route *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg) { + PyObject *__pyx_v__arg = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("loop", 0); + + /* "dnet.pyx":1159 + * arg -- optional callback argument + * """ + * _arg = (callback, arg) # <<<<<<<<<<<<<< + * return route_loop(self.route, __route_callback, _arg) + * + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1159, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_callback); + __Pyx_GIVEREF(__pyx_v_callback); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_callback); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_arg); + __pyx_v__arg = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1160 + * """ + * _arg = (callback, arg) + * return route_loop(self.route, __route_callback, _arg) # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(route_loop(__pyx_v_self->route, __pyx_f_4dnet___route_callback, ((void *)__pyx_v__arg))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1459 */ - __pyx_1 = (__pyx_v_c < ((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->max); - if (__pyx_1) { + /* "dnet.pyx":1149 + * return None + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the system routing table, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.route.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v__arg); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1162 + * return route_loop(self.route, __route_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_11__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_5route_11__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_5route_10__iter__(((struct __pyx_obj_4dnet_route *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1460 */ - goto __pyx_L4; - goto __pyx_L7; +static PyObject *__pyx_pf_4dnet_5route_10__iter__(struct __pyx_obj_4dnet_route *__pyx_v_self) { + PyObject *__pyx_v_l = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":1163 + * + * def __iter__(self): + * l = [] # <<<<<<<<<<<<<< + * self.loop(__iter_append, l) + * return iter(l) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_l = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1164 + * def __iter__(self): + * l = [] + * self.loop(__iter_append, l) # <<<<<<<<<<<<<< + * return iter(l) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_iter_append); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; } - __pyx_L7:; } - __pyx_L4:; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_l); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1165 + * l = [] + * self.loop(__iter_append, l) + * return iter(l) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1162 + * return route_loop(self.route, __route_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("dnet.route.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1167 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.route: + * route_close(self.route) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_5route_13__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_5route_13__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_5route_12__dealloc__(((struct __pyx_obj_4dnet_route *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_4dnet_5route_12__dealloc__(struct __pyx_obj_4dnet_route *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":1168 + * + * def __dealloc__(self): + * if self.route: # <<<<<<<<<<<<<< + * route_close(self.route) + * + */ + __pyx_t_1 = (__pyx_v_self->route != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1169 + * def __dealloc__(self): + * if self.route: + * route_close(self.route) # <<<<<<<<<<<<<< + * + * # + */ + (void)(route_close(__pyx_v_self->route)); + + /* "dnet.pyx":1168 + * + * def __dealloc__(self): + * if self.route: # <<<<<<<<<<<<<< + * route_close(self.route) + * + */ + } + + /* "dnet.pyx":1167 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.route: + * route_close(self.route) + */ + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_5route_15__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_5route_14__reduce_cython__(((struct __pyx_obj_4dnet_route *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_5route_14__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_route *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.route cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.route cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.route.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.route cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_5route_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_5route_17__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_5route_16__setstate_cython__(((struct __pyx_obj_4dnet_route *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_5route_16__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_route *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.route cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.route cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.route.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1201 + * FW_DIR_OUT = 2 + * + * cdef object rule_to_dict(fw_rule *rule): # <<<<<<<<<<<<<< + * d = {} + * d['device'] = rule.fw_device + */ + +static PyObject *__pyx_f_4dnet_rule_to_dict(struct fw_rule *__pyx_v_rule) { + PyObject *__pyx_v_d = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("rule_to_dict", 0); + + /* "dnet.pyx":1202 + * + * cdef object rule_to_dict(fw_rule *rule): + * d = {} # <<<<<<<<<<<<<< + * d['device'] = rule.fw_device + * d['op'] = rule.fw_op + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1202, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_d = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1203 + * cdef object rule_to_dict(fw_rule *rule): + * d = {} + * d['device'] = rule.fw_device # <<<<<<<<<<<<<< + * d['op'] = rule.fw_op + * d['dir'] = rule.fw_dir + */ + __pyx_t_1 = __Pyx_PyObject_FromString(__pyx_v_rule->fw_device); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1203, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_device, __pyx_t_1) < 0)) __PYX_ERR(0, 1203, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1204 + * d = {} + * d['device'] = rule.fw_device + * d['op'] = rule.fw_op # <<<<<<<<<<<<<< + * d['dir'] = rule.fw_dir + * if rule.fw_proto != 0: + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rule->fw_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_op, __pyx_t_1) < 0)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1205 + * d['device'] = rule.fw_device + * d['op'] = rule.fw_op + * d['dir'] = rule.fw_dir # <<<<<<<<<<<<<< + * if rule.fw_proto != 0: + * d['proto'] = rule.fw_proto + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rule->fw_dir); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_dir, __pyx_t_1) < 0)) __PYX_ERR(0, 1205, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1206 + * d['op'] = rule.fw_op + * d['dir'] = rule.fw_dir + * if rule.fw_proto != 0: # <<<<<<<<<<<<<< + * d['proto'] = rule.fw_proto + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + */ + __pyx_t_2 = ((__pyx_v_rule->fw_proto != 0) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1207 + * d['dir'] = rule.fw_dir + * if rule.fw_proto != 0: + * d['proto'] = rule.fw_proto # <<<<<<<<<<<<<< + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rule->fw_proto); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_proto, __pyx_t_1) < 0)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1206 + * d['op'] = rule.fw_op + * d['dir'] = rule.fw_dir + * if rule.fw_proto != 0: # <<<<<<<<<<<<<< + * d['proto'] = rule.fw_proto + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + */ + } + + /* "dnet.pyx":1208 + * if rule.fw_proto != 0: + * d['proto'] = rule.fw_proto + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_short(__pyx_v_rule->fw_src.addr_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1208, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1208, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "dnet.pyx":1209 + * d['proto'] = rule.fw_proto + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + * d['src'] = addr(addr_ntoa(&rule.fw_src)) # <<<<<<<<<<<<<< + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + */ + __pyx_t_4 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_rule->fw_src))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1209, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_src, __pyx_t_3) < 0)) __PYX_ERR(0, 1209, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":1208 + * if rule.fw_proto != 0: + * d['proto'] = rule.fw_proto + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + */ + } + + /* "dnet.pyx":1210 + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + */ + __pyx_t_3 = __Pyx_PyInt_From_unsigned_short(__pyx_v_rule->fw_dst.addr_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1210, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "dnet.pyx":1211 + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) # <<<<<<<<<<<<<< + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + */ + __pyx_t_1 = __Pyx_PyStr_FromString(addr_ntoa((&__pyx_v_rule->fw_dst))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_4dnet_addr), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_dst, __pyx_t_4) < 0)) __PYX_ERR(0, 1211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dnet.pyx":1210 + * if rule.fw_src.addr_type != ADDR_TYPE_NONE: + * d['src'] = addr(addr_ntoa(&rule.fw_src)) + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: # <<<<<<<<<<<<<< + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1461 */ - __pyx_2 = PyLong_FromUnsignedLong((((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)->start + __pyx_v_c)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1461; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; + /* "dnet.pyx":1212 + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): # <<<<<<<<<<<<<< + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): + */ + __pyx_t_5 = (((__pyx_v_rule->fw_sport[0]) == 0) != 0); + if (__pyx_t_5) { + } else { + __pyx_t_2 = __pyx_t_5; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_5 = (((__pyx_v_rule->fw_sport[1]) == 0) != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L7_bool_binop_done:; + __pyx_t_5 = ((!__pyx_t_2) != 0); + if (__pyx_t_5) { + + /* "dnet.pyx":1213 + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] # <<<<<<<<<<<<<< + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): + * d['dport'] = [ rule.fw_dport[0], rule.fw_dport[1] ] + */ + __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_rule->fw_sport[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_rule->fw_sport[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); + __pyx_t_4 = 0; + __pyx_t_1 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_sport, __pyx_t_3) < 0)) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":1212 + * if rule.fw_dst.addr_type != ADDR_TYPE_NONE: + * d['dst'] = addr(addr_ntoa(&rule.fw_dst)) + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): # <<<<<<<<<<<<<< + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): + */ + } + + /* "dnet.pyx":1214 + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): # <<<<<<<<<<<<<< + * d['dport'] = [ rule.fw_dport[0], rule.fw_dport[1] ] + * return d + */ + __pyx_t_2 = (((__pyx_v_rule->fw_dport[0]) == 0) != 0); + if (__pyx_t_2) { + } else { + __pyx_t_5 = __pyx_t_2; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_2 = (((__pyx_v_rule->fw_dport[1]) == 0) != 0); + __pyx_t_5 = __pyx_t_2; + __pyx_L10_bool_binop_done:; + __pyx_t_2 = ((!__pyx_t_5) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1215 + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): + * d['dport'] = [ rule.fw_dport[0], rule.fw_dport[1] ] # <<<<<<<<<<<<<< + * return d + * + */ + __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_rule->fw_dport[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_rule->fw_dport[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + if (unlikely(PyDict_SetItem(__pyx_v_d, __pyx_n_u_dport, __pyx_t_4) < 0)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dnet.pyx":1214 + * if not (rule.fw_sport[0] == 0 and rule.fw_sport[1] == 0): + * d['sport'] = [ rule.fw_sport[0], rule.fw_sport[1] ] + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): # <<<<<<<<<<<<<< + * d['dport'] = [ rule.fw_dport[0], rule.fw_dport[1] ] + * return d + */ + } + + /* "dnet.pyx":1216 + * if not (rule.fw_dport[0] == 0 and rule.fw_dport[1] == 0): + * d['dport'] = [ rule.fw_dport[0], rule.fw_dport[1] ] + * return d # <<<<<<<<<<<<<< + * + * cdef dict_to_rule(object d, fw_rule *rule): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_d); + __pyx_r = __pyx_v_d; goto __pyx_L0; - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":1201 + * FW_DIR_OUT = 2 + * + * cdef object rule_to_dict(fw_rule *rule): # <<<<<<<<<<<<<< + * d = {} + * d['device'] = rule.fw_device + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.rule_to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_d); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1218 + * return d + * + * cdef dict_to_rule(object d, fw_rule *rule): # <<<<<<<<<<<<<< + * s = d['device'] + * strlcpy(rule.fw_device, s, 16) + */ + +static PyObject *__pyx_f_4dnet_dict_to_rule(PyObject *__pyx_v_d, struct fw_rule *__pyx_v_rule) { + PyObject *__pyx_v_s = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + char *__pyx_t_2; + int __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + struct addr __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("dict_to_rule", 0); + + /* "dnet.pyx":1219 + * + * cdef dict_to_rule(object d, fw_rule *rule): + * s = d['device'] # <<<<<<<<<<<<<< + * strlcpy(rule.fw_device, s, 16) + * rule.fw_op = d['op'] + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_device); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_s = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dnet.pyx":1220 + * cdef dict_to_rule(object d, fw_rule *rule): + * s = d['device'] + * strlcpy(rule.fw_device, s, 16) # <<<<<<<<<<<<<< + * rule.fw_op = d['op'] + * rule.fw_dir = d['dir'] + */ + __pyx_t_2 = __Pyx_PyObject_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 1220, __pyx_L1_error) + (void)(strlcpy(__pyx_v_rule->fw_device, __pyx_t_2, 16)); + + /* "dnet.pyx":1221 + * s = d['device'] + * strlcpy(rule.fw_device, s, 16) + * rule.fw_op = d['op'] # <<<<<<<<<<<<<< + * rule.fw_dir = d['dir'] + * if 'proto' in d: + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1221, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rule->fw_op = __pyx_t_3; + + /* "dnet.pyx":1222 + * strlcpy(rule.fw_device, s, 16) + * rule.fw_op = d['op'] + * rule.fw_dir = d['dir'] # <<<<<<<<<<<<<< + * if 'proto' in d: + * rule.fw_proto = d['proto'] + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_dir); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rule->fw_dir = __pyx_t_3; + + /* "dnet.pyx":1223 + * rule.fw_op = d['op'] + * rule.fw_dir = d['dir'] + * if 'proto' in d: # <<<<<<<<<<<<<< + * rule.fw_proto = d['proto'] + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_proto, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1223, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + if (__pyx_t_5) { + + /* "dnet.pyx":1224 + * rule.fw_dir = d['dir'] + * if 'proto' in d: + * rule.fw_proto = d['proto'] # <<<<<<<<<<<<<< + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: + * rule.fw_sport[1] = 65535 + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_proto); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1224, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1224, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rule->fw_proto = __pyx_t_3; + + /* "dnet.pyx":1225 + * if 'proto' in d: + * rule.fw_proto = d['proto'] + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: # <<<<<<<<<<<<<< + * rule.fw_sport[1] = 65535 + * rule.fw_dport[1] = 65535 + */ + __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rule->fw_proto); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IP_PROTO_TCP); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = PyObject_RichCompare(__pyx_t_1, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (!__pyx_t_4) { + } else { + __pyx_t_5 = __pyx_t_4; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_rule->fw_proto); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_IP_PROTO_UDP); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = PyObject_RichCompare(__pyx_t_7, __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __pyx_t_4; + __pyx_L5_bool_binop_done:; + if (__pyx_t_5) { + + /* "dnet.pyx":1226 + * rule.fw_proto = d['proto'] + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: + * rule.fw_sport[1] = 65535 # <<<<<<<<<<<<<< + * rule.fw_dport[1] = 65535 + * if 'src' in d: + */ + (__pyx_v_rule->fw_sport[1]) = 0xFFFF; + + /* "dnet.pyx":1227 + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: + * rule.fw_sport[1] = 65535 + * rule.fw_dport[1] = 65535 # <<<<<<<<<<<<<< + * if 'src' in d: + * rule.fw_src = (d['src'])._addr + */ + (__pyx_v_rule->fw_dport[1]) = 0xFFFF; + + /* "dnet.pyx":1225 + * if 'proto' in d: + * rule.fw_proto = d['proto'] + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: # <<<<<<<<<<<<<< + * rule.fw_sport[1] = 65535 + * rule.fw_dport[1] = 65535 + */ + } + + /* "dnet.pyx":1223 + * rule.fw_op = d['op'] + * rule.fw_dir = d['dir'] + * if 'proto' in d: # <<<<<<<<<<<<<< + * rule.fw_proto = d['proto'] + * if rule.fw_proto == IP_PROTO_TCP or rule.fw_proto == IP_PROTO_UDP: + */ + } + + /* "dnet.pyx":1228 + * rule.fw_sport[1] = 65535 + * rule.fw_dport[1] = 65535 + * if 'src' in d: # <<<<<<<<<<<<<< + * rule.fw_src = (d['src'])._addr + * if 'dst' in d: + */ + __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_src, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1228, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_5 != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":1229 + * rule.fw_dport[1] = 65535 + * if 'src' in d: + * rule.fw_src = (d['src'])._addr # <<<<<<<<<<<<<< + * if 'dst' in d: + * rule.fw_dst = (d['dst'])._addr + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_src); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1)->_addr; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rule->fw_src = __pyx_t_8; + + /* "dnet.pyx":1228 + * rule.fw_sport[1] = 65535 + * rule.fw_dport[1] = 65535 + * if 'src' in d: # <<<<<<<<<<<<<< + * rule.fw_src = (d['src'])._addr + * if 'dst' in d: + */ + } + + /* "dnet.pyx":1230 + * if 'src' in d: + * rule.fw_src = (d['src'])._addr + * if 'dst' in d: # <<<<<<<<<<<<<< + * rule.fw_dst = (d['dst'])._addr + * if 'sport' in d: + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_dst, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1230, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + if (__pyx_t_5) { + + /* "dnet.pyx":1231 + * rule.fw_src = (d['src'])._addr + * if 'dst' in d: + * rule.fw_dst = (d['dst'])._addr # <<<<<<<<<<<<<< + * if 'sport' in d: + * rule.fw_sport[0] = d['sport'][0] + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_dst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1231, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = ((struct __pyx_obj_4dnet_addr *)__pyx_t_1)->_addr; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_rule->fw_dst = __pyx_t_8; + + /* "dnet.pyx":1230 + * if 'src' in d: + * rule.fw_src = (d['src'])._addr + * if 'dst' in d: # <<<<<<<<<<<<<< + * rule.fw_dst = (d['dst'])._addr + * if 'sport' in d: + */ + } + + /* "dnet.pyx":1232 + * if 'dst' in d: + * rule.fw_dst = (d['dst'])._addr + * if 'sport' in d: # <<<<<<<<<<<<<< + * rule.fw_sport[0] = d['sport'][0] + * rule.fw_sport[1] = d['sport'][1] + */ + __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_sport, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1232, __pyx_L1_error) + __pyx_t_4 = (__pyx_t_5 != 0); + if (__pyx_t_4) { + + /* "dnet.pyx":1233 + * rule.fw_dst = (d['dst'])._addr + * if 'sport' in d: + * rule.fw_sport[0] = d['sport'][0] # <<<<<<<<<<<<<< + * rule.fw_sport[1] = d['sport'][1] + * if 'dport' in d: + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_sport); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1233, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1233, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (__pyx_v_rule->fw_sport[0]) = __pyx_t_3; + + /* "dnet.pyx":1234 + * if 'sport' in d: + * rule.fw_sport[0] = d['sport'][0] + * rule.fw_sport[1] = d['sport'][1] # <<<<<<<<<<<<<< + * if 'dport' in d: + * rule.fw_dport[0] = d['dport'][0] + */ + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_sport); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1234, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + (__pyx_v_rule->fw_sport[1]) = __pyx_t_3; + + /* "dnet.pyx":1232 + * if 'dst' in d: + * rule.fw_dst = (d['dst'])._addr + * if 'sport' in d: # <<<<<<<<<<<<<< + * rule.fw_sport[0] = d['sport'][0] + * rule.fw_sport[1] = d['sport'][1] + */ + } + + /* "dnet.pyx":1235 + * rule.fw_sport[0] = d['sport'][0] + * rule.fw_sport[1] = d['sport'][1] + * if 'dport' in d: # <<<<<<<<<<<<<< + * rule.fw_dport[0] = d['dport'][0] + * rule.fw_dport[1] = d['dport'][1] + */ + __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_n_u_dport, __pyx_v_d, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1235, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + if (__pyx_t_5) { + + /* "dnet.pyx":1236 + * rule.fw_sport[1] = d['sport'][1] + * if 'dport' in d: + * rule.fw_dport[0] = d['dport'][0] # <<<<<<<<<<<<<< + * rule.fw_dport[1] = d['dport'][1] + * + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_dport); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1236, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (__pyx_v_rule->fw_dport[0]) = __pyx_t_3; + + /* "dnet.pyx":1237 + * if 'dport' in d: + * rule.fw_dport[0] = d['dport'][0] + * rule.fw_dport[1] = d['dport'][1] # <<<<<<<<<<<<<< + * + * cdef int __fw_callback(fw_rule *rule, void *arg) except -1: + */ + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_v_d, __pyx_n_u_dport); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + (__pyx_v_rule->fw_dport[1]) = __pyx_t_3; + + /* "dnet.pyx":1235 + * rule.fw_sport[0] = d['sport'][0] + * rule.fw_sport[1] = d['sport'][1] + * if 'dport' in d: # <<<<<<<<<<<<<< + * rule.fw_dport[0] = d['dport'][0] + * rule.fw_dport[1] = d['dport'][1] + */ + } + + /* "dnet.pyx":1218 + * return d + * + * cdef dict_to_rule(object d, fw_rule *rule): # <<<<<<<<<<<<<< + * s = d['device'] + * strlcpy(rule.fw_device, s, 16) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.__rand_xrange.__next__"); + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dnet.dict_to_rule", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - Py_DECREF(__pyx_v_i); - Py_DECREF(__pyx_v_self); + __Pyx_XDECREF(__pyx_v_s); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static int __pyx_f_4dnet_3tun___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_f_4dnet_3tun___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - struct __pyx_obj_4dnet_addr *__pyx_v_src = 0; - struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; - PyObject *__pyx_v_mtu = 0; +/* "dnet.pyx":1239 + * rule.fw_dport[1] = d['dport'][1] + * + * cdef int __fw_callback(fw_rule *rule, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * ret = f(rule_to_dict(rule), a) + */ + +static int __pyx_f_4dnet___fw_callback(struct fw_rule *__pyx_v_rule, void *__pyx_v_arg) { + PyObject *__pyx_v_f = NULL; + PyObject *__pyx_v_a = NULL; + PyObject *__pyx_v_ret = NULL; int __pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {"src","dst","mtu",0}; - __pyx_v_mtu = __pyx_k59; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO|O", __pyx_argnames, &__pyx_v_src, &__pyx_v_dst, &__pyx_v_mtu)) return -1; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_src); - Py_INCREF(__pyx_v_dst); - Py_INCREF(__pyx_v_mtu); - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_src), __pyx_ptype_4dnet_addr, 1, "src")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} - if (!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst")) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1491 */ - __pyx_1 = PyLong_AsLong(__pyx_v_mtu); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1491; goto __pyx_L1;} - ((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun = tun_open((&__pyx_v_src->_addr),(&__pyx_v_dst->_addr),__pyx_1); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1492 */ - __pyx_1 = PyLong_AsLong(__pyx_v_mtu); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1492; goto __pyx_L1;} - ((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->mtu = __pyx_1; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1493 */ - __pyx_1 = (!(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun != 0)); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1494 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1494; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1495 */ - __pyx_1 = PyLong_AsLong(__pyx_v_mtu); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; goto __pyx_L1;} - ((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->buf = malloc(__pyx_1); + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *(*__pyx_t_5)(PyObject *); + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + int __pyx_t_8; + int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__fw_callback", 0); + + /* "dnet.pyx":1240 + * + * cdef int __fw_callback(fw_rule *rule, void *arg) except -1: + * f, a = arg # <<<<<<<<<<<<<< + * ret = f(rule_to_dict(rule), a) + * if not ret: + */ + __pyx_t_1 = ((PyObject *)__pyx_v_arg); + __Pyx_INCREF(__pyx_t_1); + if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) { + PyObject* sequence = __pyx_t_1; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 2)) { + if (size > 2) __Pyx_RaiseTooManyValuesError(2); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1240, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_3 = PyList_GET_ITEM(sequence, 1); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + #else + __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + #endif + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } else { + Py_ssize_t index = -1; + __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext; + index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_2); + index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed; + __Pyx_GOTREF(__pyx_t_3); + if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1240, __pyx_L1_error) + __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L4_unpacking_done; + __pyx_L3_unpacking_failed:; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1240, __pyx_L1_error) + __pyx_L4_unpacking_done:; + } + __pyx_v_f = __pyx_t_2; + __pyx_t_2 = 0; + __pyx_v_a = __pyx_t_3; + __pyx_t_3 = 0; + + /* "dnet.pyx":1241 + * cdef int __fw_callback(fw_rule *rule, void *arg) except -1: + * f, a = arg + * ret = f(rule_to_dict(rule), a) # <<<<<<<<<<<<<< + * if not ret: + * ret = 0 + */ + __pyx_t_3 = __pyx_f_4dnet_rule_to_dict(__pyx_v_rule); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_f); + __pyx_t_2 = __pyx_v_f; __pyx_t_4 = NULL; + __pyx_t_6 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_6 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_a}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1241, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_a}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1241, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_3); + __Pyx_INCREF(__pyx_v_a); + __Pyx_GIVEREF(__pyx_v_a); + PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_a); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_ret = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dnet.pyx":1242 + * f, a = arg + * ret = f(rule_to_dict(rule), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_ret); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 1242, __pyx_L1_error) + __pyx_t_9 = ((!__pyx_t_8) != 0); + if (__pyx_t_9) { + + /* "dnet.pyx":1243 + * ret = f(rule_to_dict(rule), a) + * if not ret: + * ret = 0 # <<<<<<<<<<<<<< + * return ret + * + */ + __Pyx_INCREF(__pyx_int_0); + __Pyx_DECREF_SET(__pyx_v_ret, __pyx_int_0); + + /* "dnet.pyx":1242 + * f, a = arg + * ret = f(rule_to_dict(rule), a) + * if not ret: # <<<<<<<<<<<<<< + * ret = 0 + * return ret + */ + } - __pyx_r = 0; + /* "dnet.pyx":1244 + * if not ret: + * ret = 0 + * return ret # <<<<<<<<<<<<<< + * + * cdef class fw: + */ + __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_ret); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1244, __pyx_L1_error) + __pyx_r = __pyx_t_6; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.tun.__init__"); + + /* "dnet.pyx":1239 + * rule.fw_dport[1] = d['dport'][1] + * + * cdef int __fw_callback(fw_rule *rule, void *arg) except -1: # <<<<<<<<<<<<<< + * f, a = arg + * ret = f(rule_to_dict(rule), a) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dnet.__fw_callback", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_src); - Py_DECREF(__pyx_v_dst); - Py_DECREF(__pyx_v_mtu); + __Pyx_XDECREF(__pyx_v_f); + __Pyx_XDECREF(__pyx_v_a); + __Pyx_XDECREF(__pyx_v_ret); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3tun_4name___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_3tun_4name___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":1253 + * cdef fw_t *fw + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.fw = fw_open() + * if not self.fw: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_2fw_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_2fw_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_2fw___init__(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1500 */ - __pyx_1 = PyBytes_FromString(tun_name(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1500; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; +static int __pyx_pf_4dnet_2fw___init__(struct __pyx_obj_4dnet_fw *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":1254 + * + * def __init__(self): + * self.fw = fw_open() # <<<<<<<<<<<<<< + * if not self.fw: + * raise OSError, __oserror() + */ + __pyx_v_self->fw = fw_open(); + + /* "dnet.pyx":1255 + * def __init__(self): + * self.fw = fw_open() + * if not self.fw: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->fw != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1256 + * self.fw = fw_open() + * if not self.fw: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def add(self, d): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1256, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1256, __pyx_L1_error) + + /* "dnet.pyx":1255 + * def __init__(self): + * self.fw = fw_open() + * if not self.fw: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.tun.name.__get__"); + /* "dnet.pyx":1253 + * cdef fw_t *fw + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.fw = fw_open() + * if not self.fw: + */ + + /* function exit code */ __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.fw.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1258 + * raise OSError, __oserror() + * + * def add(self, d): # <<<<<<<<<<<<<< + * """Add a firewall rule specified as a dict. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_3add(PyObject *__pyx_v_self, PyObject *__pyx_v_d); /*proto*/ +static char __pyx_doc_4dnet_2fw_2add[] = "Add a firewall rule specified as a dict.\n\n Dict values:\n device -- interface name\t\t\t(string)\n op -- operation (FW_OP_*)\t\t\t(integer)\n dir -- direction (FW_DIR_*)\t\t\t(integer)\n proto -- IP protocol (IP_PROTO_*)\t\t(integer)\n src -- source address / net\t\t\t(addr object)\n dst -- destination address / net\t\t(addr object)\n sport -- source port range or ICMP type/mask\t(list of 2 integers)\n dport -- dest port range or ICMP code/mask\t(list of 2 integers)\n "; +static PyObject *__pyx_pw_4dnet_2fw_3add(PyObject *__pyx_v_self, PyObject *__pyx_v_d) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("add (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2fw_2add(((struct __pyx_obj_4dnet_fw *)__pyx_v_self), ((PyObject *)__pyx_v_d)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3tun_2fd___get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_f_4dnet_3tun_2fd___get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - Py_INCREF(__pyx_v_self); +static PyObject *__pyx_pf_4dnet_2fw_2add(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_d) { + struct fw_rule __pyx_v_rule; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("add", 0); + + /* "dnet.pyx":1272 + * """ + * cdef fw_rule rule + * memset(&rule, 0, sizeof(rule)) # <<<<<<<<<<<<<< + * dict_to_rule(d, &rule) + * if fw_add(self.fw, &rule) < 0: + */ + (void)(memset(((char *)(&__pyx_v_rule)), 0, (sizeof(__pyx_v_rule)))); + + /* "dnet.pyx":1273 + * cdef fw_rule rule + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) # <<<<<<<<<<<<<< + * if fw_add(self.fw, &rule) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_f_4dnet_dict_to_rule(__pyx_v_d, (&__pyx_v_rule)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1274 + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) + * if fw_add(self.fw, &rule) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((fw_add(__pyx_v_self->fw, (&__pyx_v_rule)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1275 + * dict_to_rule(d, &rule) + * if fw_add(self.fw, &rule) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def delete(self, d): + */ + __pyx_t_1 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1275, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 1275, __pyx_L1_error) + + /* "dnet.pyx":1274 + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) + * if fw_add(self.fw, &rule) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1505 */ - __pyx_1 = PyLong_FromLong(tun_fileno(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1505; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; + /* "dnet.pyx":1258 + * raise OSError, __oserror() + * + * def add(self, d): # <<<<<<<<<<<<<< + * """Add a firewall rule specified as a dict. + * + */ - __pyx_r = Py_None; Py_INCREF(Py_None); + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.tun.fd.__get__"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.fw.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3tun_fileno(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3tun_fileno[] = "Return file descriptor for tunnel handle."; -static PyObject *__pyx_f_4dnet_3tun_fileno(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":1277 + * raise OSError, __oserror() + * + * def delete(self, d): # <<<<<<<<<<<<<< + * """Delete a firewall rule specified as a dict.""" + * cdef fw_rule rule + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_d); /*proto*/ +static char __pyx_doc_4dnet_2fw_4delete[] = "Delete a firewall rule specified as a dict."; +static PyObject *__pyx_pw_4dnet_2fw_5delete(PyObject *__pyx_v_self, PyObject *__pyx_v_d) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("delete (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2fw_4delete(((struct __pyx_obj_4dnet_fw *)__pyx_v_self), ((PyObject *)__pyx_v_d)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1509 */ - __pyx_1 = PyLong_FromLong(tun_fileno(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1509; goto __pyx_L1;} - __pyx_r = __pyx_1; - __pyx_1 = 0; - goto __pyx_L0; +static PyObject *__pyx_pf_4dnet_2fw_4delete(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_d) { + struct fw_rule __pyx_v_rule; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("delete", 0); + + /* "dnet.pyx":1280 + * """Delete a firewall rule specified as a dict.""" + * cdef fw_rule rule + * memset(&rule, 0, sizeof(rule)) # <<<<<<<<<<<<<< + * dict_to_rule(d, &rule) + * if fw_delete(self.fw, &rule) < 0: + */ + (void)(memset(((char *)(&__pyx_v_rule)), 0, (sizeof(__pyx_v_rule)))); + + /* "dnet.pyx":1281 + * cdef fw_rule rule + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) # <<<<<<<<<<<<<< + * if fw_delete(self.fw, &rule) < 0: + * raise OSError, __oserror() + */ + __pyx_t_1 = __pyx_f_4dnet_dict_to_rule(__pyx_v_d, (&__pyx_v_rule)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1282 + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) + * if fw_delete(self.fw, &rule) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_2 = ((fw_delete(__pyx_v_self->fw, (&__pyx_v_rule)) < 0) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1283 + * dict_to_rule(d, &rule) + * if fw_delete(self.fw, &rule) < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def loop(self, callback, arg=None): + */ + __pyx_t_1 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1283, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 1283, __pyx_L1_error) + + /* "dnet.pyx":1282 + * memset(&rule, 0, sizeof(rule)) + * dict_to_rule(d, &rule) + * if fw_delete(self.fw, &rule) < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } - __pyx_r = Py_None; Py_INCREF(Py_None); + /* "dnet.pyx":1277 + * raise OSError, __oserror() + * + * def delete(self, d): # <<<<<<<<<<<<<< + * """Delete a firewall rule specified as a dict.""" + * cdef fw_rule rule + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("dnet.tun.fileno"); - __pyx_r = 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.fw.delete", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - return __pyx_r; -} - -static PyObject *__pyx_f_4dnet_3tun_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3tun_send[] = "Send an IP packet, returning the number of bytes sent\n or -1 on failure.\n\n Arguments:\n pkt -- binary string representing an IP packet\n "; -static PyObject *__pyx_f_4dnet_3tun_send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_pkt = 0; - PyObject *__pyx_r; - char (*__pyx_1); - PyObject *__pyx_2 = 0; - static char *__pyx_argnames[] = {"pkt",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_pkt)) return 0; - Py_INCREF(__pyx_v_self); - Py_INCREF(__pyx_v_pkt); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1518 */ - __pyx_1 = PyBytes_AsString(__pyx_v_pkt); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} - __pyx_2 = PyLong_FromLong(tun_send(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun,__pyx_1,PyBytes_Size(__pyx_v_pkt))); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1518; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1285 + * raise OSError, __oserror() + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the local firewall ruleset, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_7loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_2fw_6loop[] = "Iterate over the local firewall ruleset, invoking a user callback\n with each entry, returning the status of the callback routine.\n\n Keyword arguments:\n callback -- callback function with (dict, arg) prototype.\n If this function returns a non-zero value, the loop\n will break early.\n arg -- optional callback argument\n "; +static PyObject *__pyx_pw_4dnet_2fw_7loop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_callback = 0; + PyObject *__pyx_v_arg = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("loop (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_callback,&__pyx_n_s_arg,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_callback)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loop") < 0)) __PYX_ERR(0, 1285, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_callback = values[0]; + __pyx_v_arg = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("loop", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1285, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.fw.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_2fw_6loop(((struct __pyx_obj_4dnet_fw *)__pyx_v_self), __pyx_v_callback, __pyx_v_arg); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_2fw_6loop(struct __pyx_obj_4dnet_fw *__pyx_v_self, PyObject *__pyx_v_callback, PyObject *__pyx_v_arg) { + PyObject *__pyx_v__arg = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("loop", 0); + + /* "dnet.pyx":1295 + * arg -- optional callback argument + * """ + * _arg = (callback, arg) # <<<<<<<<<<<<<< + * return fw_loop(self.fw, __fw_callback, _arg) + * + */ + __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1295, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_callback); + __Pyx_GIVEREF(__pyx_v_callback); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_callback); + __Pyx_INCREF(__pyx_v_arg); + __Pyx_GIVEREF(__pyx_v_arg); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_arg); + __pyx_v__arg = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1296 + * """ + * _arg = (callback, arg) + * return fw_loop(self.fw, __fw_callback, _arg) # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(fw_loop(__pyx_v_self->fw, __pyx_f_4dnet___fw_callback, ((void *)__pyx_v__arg))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1296, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - __Pyx_AddTraceback("dnet.tun.send"); - __pyx_r = 0; + + /* "dnet.pyx":1285 + * raise OSError, __oserror() + * + * def loop(self, callback, arg=None): # <<<<<<<<<<<<<< + * """Iterate over the local firewall ruleset, invoking a user callback + * with each entry, returning the status of the callback routine. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.fw.loop", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); - Py_DECREF(__pyx_v_pkt); + __Pyx_XDECREF(__pyx_v__arg); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3tun_recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_4dnet_3tun_recv[] = "Return the next packet delivered to the tunnel interface."; -static PyObject *__pyx_f_4dnet_3tun_recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_v_n; - PyObject *__pyx_r; - int __pyx_1; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1523 */ - __pyx_v_n = tun_recv(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun,((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->buf,((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->mtu); - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1524 */ - __pyx_1 = (__pyx_v_n < 0); - if (__pyx_1) { - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1525 */ - __pyx_2 = __Pyx_GetName(__pyx_b, __pyx_n_OSError); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1525; goto __pyx_L1;} - __pyx_3 = __pyx_f_4dnet___oserror(); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1525; goto __pyx_L1;} - __Pyx_Raise(__pyx_2, __pyx_3, 0); - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1525; goto __pyx_L1;} - goto __pyx_L2; - } - __pyx_L2:; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1526 */ - __pyx_2 = PyBytes_FromStringAndSize(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->buf,__pyx_v_n); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1526; goto __pyx_L1;} - __pyx_r = __pyx_2; - __pyx_2 = 0; - goto __pyx_L0; +/* "dnet.pyx":1298 + * return fw_loop(self.fw, __fw_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_9__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_2fw_9__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2fw_8__iter__(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - __pyx_r = Py_None; Py_INCREF(Py_None); +static PyObject *__pyx_pf_4dnet_2fw_8__iter__(struct __pyx_obj_4dnet_fw *__pyx_v_self) { + PyObject *__pyx_v_l = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":1299 + * + * def __iter__(self): + * l = [] # <<<<<<<<<<<<<< + * self.loop(__iter_append, l) + * return iter(l) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1299, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_l = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":1300 + * def __iter__(self): + * l = [] + * self.loop(__iter_append, l) # <<<<<<<<<<<<<< + * return iter(l) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_loop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_iter_append); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_l}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); + __Pyx_INCREF(__pyx_v_l); + __Pyx_GIVEREF(__pyx_v_l); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_l); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":1301 + * l = [] + * self.loop(__iter_append, l) + * return iter(l) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyObject_GetIter(__pyx_v_l); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - __Pyx_AddTraceback("dnet.tun.recv"); - __pyx_r = 0; + + /* "dnet.pyx":1298 + * return fw_loop(self.fw, __fw_callback, _arg) + * + * def __iter__(self): # <<<<<<<<<<<<<< + * l = [] + * self.loop(__iter_append, l) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("dnet.fw.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_XDECREF(__pyx_v_l); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static PyObject *__pyx_f_4dnet_3tun_close(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_4dnet_3tun_close(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_r; - static char *__pyx_argnames[] = {0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "", __pyx_argnames)) return 0; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":1303 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.fw: + * fw_close(self.fw) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_2fw_11__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_2fw_11__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_2fw_10__dealloc__(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_4dnet_2fw_10__dealloc__(struct __pyx_obj_4dnet_fw *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":1304 + * + * def __dealloc__(self): + * if self.fw: # <<<<<<<<<<<<<< + * fw_close(self.fw) + * + */ + __pyx_t_1 = (__pyx_v_self->fw != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1305 + * def __dealloc__(self): + * if self.fw: + * fw_close(self.fw) # <<<<<<<<<<<<<< + * + * # + */ + (void)(fw_close(__pyx_v_self->fw)); + + /* "dnet.pyx":1304 + * + * def __dealloc__(self): + * if self.fw: # <<<<<<<<<<<<<< + * fw_close(self.fw) + * + */ + } - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1529 */ - ((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun = tun_close(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun); + /* "dnet.pyx":1303 + * return iter(l) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.fw: + * fw_close(self.fw) + */ - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.tun.close"); + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_2fw_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2fw_12__reduce_cython__(((struct __pyx_obj_4dnet_fw *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_2fw_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_fw *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.fw.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_2fw_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_2fw_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_2fw_14__setstate_cython__(((struct __pyx_obj_4dnet_fw *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_2fw_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_fw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.fw.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1333 + * cdef rand_t *rand + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.rand = rand_open() + * if not self.rand: + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_4rand_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_4rand_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} + if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; + __pyx_r = __pyx_pf_4dnet_4rand___init__(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_4dnet_4rand___init__(struct __pyx_obj_4dnet_rand *__pyx_v_self) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":1334 + * + * def __init__(self): + * self.rand = rand_open() # <<<<<<<<<<<<<< + * if not self.rand: + * raise OSError, __oserror() + */ + __pyx_v_self->rand = rand_open(); + + /* "dnet.pyx":1335 + * def __init__(self): + * self.rand = rand_open() + * if not self.rand: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + __pyx_t_1 = ((!(__pyx_v_self->rand != 0)) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1336 + * self.rand = rand_open() + * if not self.rand: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * + * def get(self, len): + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1336, __pyx_L1_error) + + /* "dnet.pyx":1335 + * def __init__(self): + * self.rand = rand_open() + * if not self.rand: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * + */ + } + + /* "dnet.pyx":1333 + * cdef rand_t *rand + * + * def __init__(self): # <<<<<<<<<<<<<< + * self.rand = rand_open() + * if not self.rand: + */ + + /* function exit code */ __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.rand.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; __pyx_L0:; - Py_DECREF(__pyx_v_self); + __Pyx_RefNannyFinishContext(); return __pyx_r; } -static void __pyx_f_4dnet_3tun___dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_f_4dnet_3tun___dealloc__(PyObject *__pyx_v_self) { - int __pyx_1; - Py_INCREF(__pyx_v_self); +/* "dnet.pyx":1338 + * raise OSError, __oserror() + * + * def get(self, len): # <<<<<<<<<<<<<< + * """Return a string of random bytes. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_3get(PyObject *__pyx_v_self, PyObject *__pyx_v_len); /*proto*/ +static char __pyx_doc_4dnet_4rand_2get[] = "Return a string of random bytes.\n \n Arguments:\n len -- number of random bytes to generate\n "; +static PyObject *__pyx_pw_4dnet_4rand_3get(PyObject *__pyx_v_self, PyObject *__pyx_v_len) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("get (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_2get(((struct __pyx_obj_4dnet_rand *)__pyx_v_self), ((PyObject *)__pyx_v_len)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1532 */ - __pyx_1 = (((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->buf != 0); - if (__pyx_1) { +static PyObject *__pyx_pf_4dnet_4rand_2get(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_len) { + char __pyx_v_buf[0x400]; + char *__pyx_v_p; + PyObject *__pyx_v_s = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("get", 0); + + /* "dnet.pyx":1346 + * cdef char buf[1024] + * cdef char *p + * if len <= 1024: # <<<<<<<<<<<<<< + * rand_get(self.rand, buf, len) + * return PyBytes_FromStringAndSize(buf, len) + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_v_len, __pyx_int_1024, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1346, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "dnet.pyx":1347 + * cdef char *p + * if len <= 1024: + * rand_get(self.rand, buf, len) # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(buf, len) + * p = malloc(len) + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1347, __pyx_L1_error) + (void)(rand_get(__pyx_v_self->rand, __pyx_v_buf, __pyx_t_3)); + + /* "dnet.pyx":1348 + * if len <= 1024: + * rand_get(self.rand, buf, len) + * return PyBytes_FromStringAndSize(buf, len) # <<<<<<<<<<<<<< + * p = malloc(len) + * rand_get(self.rand, p, len) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1348, __pyx_L1_error) + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_buf, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1533 */ - free(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->buf); - goto __pyx_L2; + /* "dnet.pyx":1346 + * cdef char buf[1024] + * cdef char *p + * if len <= 1024: # <<<<<<<<<<<<<< + * rand_get(self.rand, buf, len) + * return PyBytes_FromStringAndSize(buf, len) + */ } - __pyx_L2:; - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1534 */ - __pyx_1 = (((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun != 0); - if (__pyx_1) { + /* "dnet.pyx":1349 + * rand_get(self.rand, buf, len) + * return PyBytes_FromStringAndSize(buf, len) + * p = malloc(len) # <<<<<<<<<<<<<< + * rand_get(self.rand, p, len) + * s = PyBytes_FromStringAndSize(p, len) + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1349, __pyx_L1_error) + __pyx_v_p = malloc(__pyx_t_3); + + /* "dnet.pyx":1350 + * return PyBytes_FromStringAndSize(buf, len) + * p = malloc(len) + * rand_get(self.rand, p, len) # <<<<<<<<<<<<<< + * s = PyBytes_FromStringAndSize(p, len) + * free(p) + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1350, __pyx_L1_error) + (void)(rand_get(__pyx_v_self->rand, __pyx_v_p, __pyx_t_3)); + + /* "dnet.pyx":1351 + * p = malloc(len) + * rand_get(self.rand, p, len) + * s = PyBytes_FromStringAndSize(p, len) # <<<<<<<<<<<<<< + * free(p) + * return s + */ + __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_len); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1351, __pyx_L1_error) + __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_p, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_s = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dnet.pyx":1352 + * rand_get(self.rand, p, len) + * s = PyBytes_FromStringAndSize(p, len) + * free(p) # <<<<<<<<<<<<<< + * return s + * + */ + free(__pyx_v_p); - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1535 */ - tun_close(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)->tun); - goto __pyx_L3; - } - __pyx_L3:; + /* "dnet.pyx":1353 + * s = PyBytes_FromStringAndSize(p, len) + * free(p) + * return s # <<<<<<<<<<<<<< + * + * def set(self, buf): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_s); + __pyx_r = __pyx_v_s; + goto __pyx_L0; + + /* "dnet.pyx":1338 + * raise OSError, __oserror() + * + * def get(self, len): # <<<<<<<<<<<<<< + * """Return a string of random bytes. + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.get", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_s); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1355 + * return s + * + * def set(self, buf): # <<<<<<<<<<<<<< + * """Initialize the PRNG from a known seed. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_5set(PyObject *__pyx_v_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_4rand_4set[] = "Initialize the PRNG from a known seed.\n \n Arguments:\n string -- binary string seed value\n "; +static PyObject *__pyx_pw_4dnet_4rand_5set(PyObject *__pyx_v_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_4set(((struct __pyx_obj_4dnet_rand *)__pyx_v_self), ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static PyObject *__pyx_pf_4dnet_4rand_4set(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("set", 0); + + /* "dnet.pyx":1361 + * string -- binary string seed value + * """ + * rand_set(self.rand, buf, PyBytes_Size(buf)) # <<<<<<<<<<<<<< + * + * def add(self, buf): + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1361, __pyx_L1_error) + (void)(rand_set(__pyx_v_self->rand, __pyx_t_1, PyBytes_Size(__pyx_v_buf))); + + /* "dnet.pyx":1355 + * return s + * + * def set(self, buf): # <<<<<<<<<<<<<< + * """Initialize the PRNG from a known seed. + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - __pyx_L1:; - __Pyx_AddTraceback("dnet.tun.__dealloc__"); + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.rand.set", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - Py_DECREF(__pyx_v_self); -} - -static __Pyx_InternTabEntry __pyx_intern_tab[] = { - {&__pyx_n_ADDR_TYPE_ETH, "ADDR_TYPE_ETH"}, - {&__pyx_n_ADDR_TYPE_IP, "ADDR_TYPE_IP"}, - {&__pyx_n_ADDR_TYPE_IP6, "ADDR_TYPE_IP6"}, - {&__pyx_n_ADDR_TYPE_NONE, "ADDR_TYPE_NONE"}, - {&__pyx_n_ARP_ETHIP_LEN, "ARP_ETHIP_LEN"}, - {&__pyx_n_ARP_HDR_LEN, "ARP_HDR_LEN"}, - {&__pyx_n_ARP_HRD_ETH, "ARP_HRD_ETH"}, - {&__pyx_n_ARP_HRD_IEEE802, "ARP_HRD_IEEE802"}, - {&__pyx_n_ARP_OP_REPLY, "ARP_OP_REPLY"}, - {&__pyx_n_ARP_OP_REQUEST, "ARP_OP_REQUEST"}, - {&__pyx_n_ARP_OP_REVREPLY, "ARP_OP_REVREPLY"}, - {&__pyx_n_ARP_OP_REVREQUEST, "ARP_OP_REVREQUEST"}, - {&__pyx_n_ARP_PRO_IP, "ARP_PRO_IP"}, - {&__pyx_n_BSD, "BSD"}, - {&__pyx_n_ETH_ADDR_BITS, "ETH_ADDR_BITS"}, - {&__pyx_n_ETH_ADDR_BROADCAST, "ETH_ADDR_BROADCAST"}, - {&__pyx_n_ETH_ADDR_LEN, "ETH_ADDR_LEN"}, - {&__pyx_n_ETH_ADDR_UNSPEC, "ETH_ADDR_UNSPEC"}, - {&__pyx_n_ETH_CRC_LEN, "ETH_CRC_LEN"}, - {&__pyx_n_ETH_HDR_LEN, "ETH_HDR_LEN"}, - {&__pyx_n_ETH_LEN_MAX, "ETH_LEN_MAX"}, - {&__pyx_n_ETH_LEN_MIN, "ETH_LEN_MIN"}, - {&__pyx_n_ETH_MIN, "ETH_MIN"}, - {&__pyx_n_ETH_MTU, "ETH_MTU"}, - {&__pyx_n_ETH_TYPE_8021Q, "ETH_TYPE_8021Q"}, - {&__pyx_n_ETH_TYPE_ARP, "ETH_TYPE_ARP"}, - {&__pyx_n_ETH_TYPE_IP, "ETH_TYPE_IP"}, - {&__pyx_n_ETH_TYPE_IPV6, "ETH_TYPE_IPV6"}, - {&__pyx_n_ETH_TYPE_LEN, "ETH_TYPE_LEN"}, - {&__pyx_n_ETH_TYPE_LOOPBACK, "ETH_TYPE_LOOPBACK"}, - {&__pyx_n_ETH_TYPE_MPLS, "ETH_TYPE_MPLS"}, - {&__pyx_n_ETH_TYPE_MPLS_MCAST, "ETH_TYPE_MPLS_MCAST"}, - {&__pyx_n_ETH_TYPE_PPPOE, "ETH_TYPE_PPPOE"}, - {&__pyx_n_ETH_TYPE_PPPOEDISC, "ETH_TYPE_PPPOEDISC"}, - {&__pyx_n_ETH_TYPE_PUP, "ETH_TYPE_PUP"}, - {&__pyx_n_ETH_TYPE_REVARP, "ETH_TYPE_REVARP"}, - {&__pyx_n_FW_DIR_IN, "FW_DIR_IN"}, - {&__pyx_n_FW_DIR_OUT, "FW_DIR_OUT"}, - {&__pyx_n_FW_OP_ALLOW, "FW_OP_ALLOW"}, - {&__pyx_n_FW_OP_BLOCK, "FW_OP_BLOCK"}, - {&__pyx_n_INTF_FLAG_BROADCAST, "INTF_FLAG_BROADCAST"}, - {&__pyx_n_INTF_FLAG_LOOPBACK, "INTF_FLAG_LOOPBACK"}, - {&__pyx_n_INTF_FLAG_MULTICAST, "INTF_FLAG_MULTICAST"}, - {&__pyx_n_INTF_FLAG_NOARP, "INTF_FLAG_NOARP"}, - {&__pyx_n_INTF_FLAG_POINTOPOINT, "INTF_FLAG_POINTOPOINT"}, - {&__pyx_n_INTF_FLAG_UP, "INTF_FLAG_UP"}, - {&__pyx_n_INTF_TYPE_ETH, "INTF_TYPE_ETH"}, - {&__pyx_n_INTF_TYPE_LOOPBACK, "INTF_TYPE_LOOPBACK"}, - {&__pyx_n_INTF_TYPE_OTHER, "INTF_TYPE_OTHER"}, - {&__pyx_n_INTF_TYPE_TUN, "INTF_TYPE_TUN"}, - {&__pyx_n_IP6_ADDR_BITS, "IP6_ADDR_BITS"}, - {&__pyx_n_IP6_ADDR_LEN, "IP6_ADDR_LEN"}, - {&__pyx_n_IP6_ADDR_LOOPBACK, "IP6_ADDR_LOOPBACK"}, - {&__pyx_n_IP6_ADDR_UNSPEC, "IP6_ADDR_UNSPEC"}, - {&__pyx_n_IP6_HDR_LEN, "IP6_HDR_LEN"}, - {&__pyx_n_IP6_HLIM_DEFAULT, "IP6_HLIM_DEFAULT"}, - {&__pyx_n_IP6_HLIM_MAX, "IP6_HLIM_MAX"}, - {&__pyx_n_IP6_LEN_MAX, "IP6_LEN_MAX"}, - {&__pyx_n_IP6_LEN_MIN, "IP6_LEN_MIN"}, - {&__pyx_n_IP6_MTU_MIN, "IP6_MTU_MIN"}, - {&__pyx_n_IP_ADDR_ANY, "IP_ADDR_ANY"}, - {&__pyx_n_IP_ADDR_BITS, "IP_ADDR_BITS"}, - {&__pyx_n_IP_ADDR_BROADCAST, "IP_ADDR_BROADCAST"}, - {&__pyx_n_IP_ADDR_LEN, "IP_ADDR_LEN"}, - {&__pyx_n_IP_ADDR_LOOPBACK, "IP_ADDR_LOOPBACK"}, - {&__pyx_n_IP_ADDR_MCAST_ALL, "IP_ADDR_MCAST_ALL"}, - {&__pyx_n_IP_ADDR_MCAST_LOCAL, "IP_ADDR_MCAST_LOCAL"}, - {&__pyx_n_IP_DF, "IP_DF"}, - {&__pyx_n_IP_HDR_LEN, "IP_HDR_LEN"}, - {&__pyx_n_IP_HDR_LEN_MAX, "IP_HDR_LEN_MAX"}, - {&__pyx_n_IP_LEN_MAX, "IP_LEN_MAX"}, - {&__pyx_n_IP_LEN_MIN, "IP_LEN_MIN"}, - {&__pyx_n_IP_MF, "IP_MF"}, - {&__pyx_n_IP_OFFMASK, "IP_OFFMASK"}, - {&__pyx_n_IP_OPT_LEN, "IP_OPT_LEN"}, - {&__pyx_n_IP_OPT_LEN_MAX, "IP_OPT_LEN_MAX"}, - {&__pyx_n_IP_PROTO_AH, "IP_PROTO_AH"}, - {&__pyx_n_IP_PROTO_ESP, "IP_PROTO_ESP"}, - {&__pyx_n_IP_PROTO_GRE, "IP_PROTO_GRE"}, - {&__pyx_n_IP_PROTO_ICMP, "IP_PROTO_ICMP"}, - {&__pyx_n_IP_PROTO_ICMPV6, "IP_PROTO_ICMPV6"}, - {&__pyx_n_IP_PROTO_IGMP, "IP_PROTO_IGMP"}, - {&__pyx_n_IP_PROTO_IP, "IP_PROTO_IP"}, - {&__pyx_n_IP_PROTO_IPV6, "IP_PROTO_IPV6"}, - {&__pyx_n_IP_PROTO_MAX, "IP_PROTO_MAX"}, - {&__pyx_n_IP_PROTO_RAW, "IP_PROTO_RAW"}, - {&__pyx_n_IP_PROTO_RESERVED, "IP_PROTO_RESERVED"}, - {&__pyx_n_IP_PROTO_TCP, "IP_PROTO_TCP"}, - {&__pyx_n_IP_PROTO_UDP, "IP_PROTO_UDP"}, - {&__pyx_n_IP_RF, "IP_RF"}, - {&__pyx_n_IP_TOS_DEFAULT, "IP_TOS_DEFAULT"}, - {&__pyx_n_IP_TTL_DEFAULT, "IP_TTL_DEFAULT"}, - {&__pyx_n_IP_TTL_MAX, "IP_TTL_MAX"}, - {&__pyx_n_NotImplementedError, "NotImplementedError"}, - {&__pyx_n_OSError, "OSError"}, - {&__pyx_n_OverflowError, "OverflowError"}, - {&__pyx_n_StopIteration, "StopIteration"}, - {&__pyx_n_TCP_HDR_LEN, "TCP_HDR_LEN"}, - {&__pyx_n_TCP_OPT_ALTSUM, "TCP_OPT_ALTSUM"}, - {&__pyx_n_TCP_OPT_ALTSUMDATA, "TCP_OPT_ALTSUMDATA"}, - {&__pyx_n_TCP_OPT_BUBBA, "TCP_OPT_BUBBA"}, - {&__pyx_n_TCP_OPT_CC, "TCP_OPT_CC"}, - {&__pyx_n_TCP_OPT_CCECHO, "TCP_OPT_CCECHO"}, - {&__pyx_n_TCP_OPT_CCNEW, "TCP_OPT_CCNEW"}, - {&__pyx_n_TCP_OPT_CORRUPT, "TCP_OPT_CORRUPT"}, - {&__pyx_n_TCP_OPT_ECHO, "TCP_OPT_ECHO"}, - {&__pyx_n_TCP_OPT_ECHOREPLY, "TCP_OPT_ECHOREPLY"}, - {&__pyx_n_TCP_OPT_EOL, "TCP_OPT_EOL"}, - {&__pyx_n_TCP_OPT_MAX, "TCP_OPT_MAX"}, - {&__pyx_n_TCP_OPT_MD5, "TCP_OPT_MD5"}, - {&__pyx_n_TCP_OPT_MSS, "TCP_OPT_MSS"}, - {&__pyx_n_TCP_OPT_NOP, "TCP_OPT_NOP"}, - {&__pyx_n_TCP_OPT_POCONN, "TCP_OPT_POCONN"}, - {&__pyx_n_TCP_OPT_POSVC, "TCP_OPT_POSVC"}, - {&__pyx_n_TCP_OPT_REC, "TCP_OPT_REC"}, - {&__pyx_n_TCP_OPT_SACK, "TCP_OPT_SACK"}, - {&__pyx_n_TCP_OPT_SACKOK, "TCP_OPT_SACKOK"}, - {&__pyx_n_TCP_OPT_SCPS, "TCP_OPT_SCPS"}, - {&__pyx_n_TCP_OPT_SKEETER, "TCP_OPT_SKEETER"}, - {&__pyx_n_TCP_OPT_SNACK, "TCP_OPT_SNACK"}, - {&__pyx_n_TCP_OPT_SNAP, "TCP_OPT_SNAP"}, - {&__pyx_n_TCP_OPT_TCPCOMP, "TCP_OPT_TCPCOMP"}, - {&__pyx_n_TCP_OPT_TIMESTAMP, "TCP_OPT_TIMESTAMP"}, - {&__pyx_n_TCP_OPT_TRAILSUM, "TCP_OPT_TRAILSUM"}, - {&__pyx_n_TCP_OPT_WSCALE, "TCP_OPT_WSCALE"}, - {&__pyx_n_TCP_PORT_MAX, "TCP_PORT_MAX"}, - {&__pyx_n_TCP_WIN_MAX, "TCP_WIN_MAX"}, - {&__pyx_n_TH_ACK, "TH_ACK"}, - {&__pyx_n_TH_CWR, "TH_CWR"}, - {&__pyx_n_TH_ECE, "TH_ECE"}, - {&__pyx_n_TH_FIN, "TH_FIN"}, - {&__pyx_n_TH_PUSH, "TH_PUSH"}, - {&__pyx_n_TH_RST, "TH_RST"}, - {&__pyx_n_TH_SYN, "TH_SYN"}, - {&__pyx_n_TH_URG, "TH_URG"}, - {&__pyx_n_TypeError, "TypeError"}, - {&__pyx_n_UDP_HDR_LEN, "UDP_HDR_LEN"}, - {&__pyx_n_UDP_PORT_MAX, "UDP_PORT_MAX"}, - {&__pyx_n_ValueError, "ValueError"}, - {&__pyx_n___author__, "__author__"}, - {&__pyx_n___copy__, "__copy__"}, - {&__pyx_n___copyright__, "__copyright__"}, - {&__pyx_n___int__, "__int__"}, - {&__pyx_n___iter_append, "__iter_append"}, - {&__pyx_n___license__, "__license__"}, - {&__pyx_n___url__, "__url__"}, - {&__pyx_n___version__, "__version__"}, - {&__pyx_n_addr, "addr"}, - {&__pyx_n_alias_addrs, "alias_addrs"}, - {&__pyx_n_append, "append"}, - {&__pyx_n_arp_pack_hdr_ethip, "arp_pack_hdr_ethip"}, - {&__pyx_n_device, "device"}, - {&__pyx_n_dir, "dir"}, - {&__pyx_n_dport, "dport"}, - {&__pyx_n_dst, "dst"}, - {&__pyx_n_dst_addr, "dst_addr"}, - {&__pyx_n_eth, "eth"}, - {&__pyx_n_eth_aton, "eth_aton"}, - {&__pyx_n_eth_ntoa, "eth_ntoa"}, - {&__pyx_n_eth_pack_hdr, "eth_pack_hdr"}, - {&__pyx_n_flags, "flags"}, - {&__pyx_n_icmp_pack_hdr, "icmp_pack_hdr"}, - {&__pyx_n_ip, "ip"}, - {&__pyx_n_ip6, "ip6"}, - {&__pyx_n_ip6_aton, "ip6_aton"}, - {&__pyx_n_ip6_checksum, "ip6_checksum"}, - {&__pyx_n_ip6_ntoa, "ip6_ntoa"}, - {&__pyx_n_ip6_pack_hdr, "ip6_pack_hdr"}, - {&__pyx_n_ip_aton, "ip_aton"}, - {&__pyx_n_ip_checksum, "ip_checksum"}, - {&__pyx_n_ip_cksum_add, "ip_cksum_add"}, - {&__pyx_n_ip_cksum_carry, "ip_cksum_carry"}, - {&__pyx_n_ip_ntoa, "ip_ntoa"}, - {&__pyx_n_ip_pack_hdr, "ip_pack_hdr"}, - {&__pyx_n_iter, "iter"}, - {&__pyx_n_len, "len"}, - {&__pyx_n_link_addr, "link_addr"}, - {&__pyx_n_loop, "loop"}, - {&__pyx_n_mtu, "mtu"}, - {&__pyx_n_name, "name"}, - {&__pyx_n_op, "op"}, - {&__pyx_n_proto, "proto"}, - {&__pyx_n_sport, "sport"}, - {&__pyx_n_src, "src"}, - {&__pyx_n_tcp_pack_hdr, "tcp_pack_hdr"}, - {&__pyx_n_type, "type"}, - {&__pyx_n_udp_pack_hdr, "udp_pack_hdr"}, - {0, 0} -}; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_k9p, __pyx_k9, sizeof(__pyx_k9)}, - {&__pyx_k10p, __pyx_k10, sizeof(__pyx_k10)}, - {&__pyx_k12p, __pyx_k12, sizeof(__pyx_k12)}, - {&__pyx_k13p, __pyx_k13, sizeof(__pyx_k13)}, - {&__pyx_k60p, __pyx_k60, sizeof(__pyx_k60)}, - {&__pyx_k61p, __pyx_k61, sizeof(__pyx_k61)}, - {&__pyx_k62p, __pyx_k62, sizeof(__pyx_k62)}, - {&__pyx_k63p, __pyx_k63, sizeof(__pyx_k63)}, - {&__pyx_k64p, __pyx_k64, sizeof(__pyx_k64)}, - {&__pyx_k65p, __pyx_k65, sizeof(__pyx_k65)}, - {&__pyx_k66p, __pyx_k66, sizeof(__pyx_k66)}, - {&__pyx_k67p, __pyx_k67, sizeof(__pyx_k67)}, - {&__pyx_k68p, __pyx_k68, sizeof(__pyx_k68)}, - {&__pyx_k69p, __pyx_k69, sizeof(__pyx_k69)}, - {&__pyx_k70p, __pyx_k70, sizeof(__pyx_k70)}, - {&__pyx_k71p, __pyx_k71, sizeof(__pyx_k71)}, - {&__pyx_k72p, __pyx_k72, sizeof(__pyx_k72)}, - {&__pyx_k118p, __pyx_k118, sizeof(__pyx_k118)}, - {&__pyx_k119p, __pyx_k119, sizeof(__pyx_k119)}, - {0, 0, 0} -}; +/* "dnet.pyx":1363 + * rand_set(self.rand, buf, PyBytes_Size(buf)) + * + * def add(self, buf): # <<<<<<<<<<<<<< + * """Add additional entropy into the PRNG mix. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_7add(PyObject *__pyx_v_self, PyObject *__pyx_v_buf); /*proto*/ +static char __pyx_doc_4dnet_4rand_6add[] = "Add additional entropy into the PRNG mix.\n\n Arguments:\n string -- binary string\n "; +static PyObject *__pyx_pw_4dnet_4rand_7add(PyObject *__pyx_v_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("add (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_6add(((struct __pyx_obj_4dnet_rand *)__pyx_v_self), ((PyObject *)__pyx_v_buf)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyObject *__pyx_tp_new_4dnet_eth(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o; - return o; +static PyObject *__pyx_pf_4dnet_4rand_6add(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("add", 0); + + /* "dnet.pyx":1369 + * string -- binary string + * """ + * rand_add(self.rand, buf, PyBytes_Size(buf)) # <<<<<<<<<<<<<< + * + * def uint8(self): + */ + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_buf); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1369, __pyx_L1_error) + (void)(rand_add(__pyx_v_self->rand, __pyx_t_1, PyBytes_Size(__pyx_v_buf))); + + /* "dnet.pyx":1363 + * rand_set(self.rand, buf, PyBytes_Size(buf)) + * + * def add(self, buf): # <<<<<<<<<<<<<< + * """Add additional entropy into the PRNG mix. + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.rand.add", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static void __pyx_tp_dealloc_4dnet_eth(PyObject *o) { - struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o; - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_3eth___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; - PyErr_Restore(etype, eval, etb); - } - (*o->ob_type->tp_free)(o); +/* "dnet.pyx":1371 + * rand_add(self.rand, buf, PyBytes_Size(buf)) + * + * def uint8(self): # <<<<<<<<<<<<<< + * """Return a random 8-bit integer.""" + * return rand_uint8(self.rand) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_9uint8(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_4rand_8uint8[] = "Return a random 8-bit integer."; +static PyObject *__pyx_pw_4dnet_4rand_9uint8(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("uint8 (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_8uint8(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_traverse_4dnet_eth(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o; - return 0; +static PyObject *__pyx_pf_4dnet_4rand_8uint8(struct __pyx_obj_4dnet_rand *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("uint8", 0); + + /* "dnet.pyx":1373 + * def uint8(self): + * """Return a random 8-bit integer.""" + * return rand_uint8(self.rand) # <<<<<<<<<<<<<< + * + * def uint16(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(rand_uint8(__pyx_v_self->rand)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1371 + * rand_add(self.rand, buf, PyBytes_Size(buf)) + * + * def uint8(self): # <<<<<<<<<<<<<< + * """Return a random 8-bit integer.""" + * return rand_uint8(self.rand) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.uint8", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_clear_4dnet_eth(PyObject *o) { - struct __pyx_obj_4dnet_eth *p = (struct __pyx_obj_4dnet_eth *)o; - return 0; +/* "dnet.pyx":1375 + * return rand_uint8(self.rand) + * + * def uint16(self): # <<<<<<<<<<<<<< + * """Return a random 16-bit integer.""" + * return rand_uint16(self.rand) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_11uint16(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_4rand_10uint16[] = "Return a random 16-bit integer."; +static PyObject *__pyx_pw_4dnet_4rand_11uint16(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("uint16 (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_10uint16(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static struct PyMethodDef __pyx_methods_4dnet_eth[] = { - {"get", (PyCFunction)__pyx_f_4dnet_3eth_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3eth_get}, - {"set", (PyCFunction)__pyx_f_4dnet_3eth_set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3eth_set}, - {"send", (PyCFunction)__pyx_f_4dnet_3eth_send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3eth_send}, - {0, 0, 0, 0} -}; +static PyObject *__pyx_pf_4dnet_4rand_10uint16(struct __pyx_obj_4dnet_rand *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("uint16", 0); + + /* "dnet.pyx":1377 + * def uint16(self): + * """Return a random 16-bit integer.""" + * return rand_uint16(self.rand) # <<<<<<<<<<<<<< + * + * def uint32(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(rand_uint16(__pyx_v_self->rand)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; -static PyNumberMethods __pyx_tp_as_number_eth = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - -static PySequenceMethods __pyx_tp_as_sequence_eth = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_eth = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; + /* "dnet.pyx":1375 + * return rand_uint8(self.rand) + * + * def uint16(self): # <<<<<<<<<<<<<< + * """Return a random 16-bit integer.""" + * return rand_uint16(self.rand) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.uint16", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyBufferProcs __pyx_tp_as_buffer_eth = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; +/* "dnet.pyx":1379 + * return rand_uint16(self.rand) + * + * def uint32(self): # <<<<<<<<<<<<<< + * """Return a random 32-bit integer.""" + * return rand_uint32(self.rand) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_13uint32(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_4rand_12uint32[] = "Return a random 32-bit integer."; +static PyObject *__pyx_pw_4dnet_4rand_13uint32(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("uint32 (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_12uint32(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -PyTypeObject __pyx_type_4dnet_eth = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.eth", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_eth), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_eth, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - &__pyx_tp_as_number_eth, /*tp_as_number*/ - &__pyx_tp_as_sequence_eth, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_eth, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_eth, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "eth(device) -> Ethernet device object\n\n Open the specified Ethernet device for sending.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_eth, /*tp_traverse*/ - __pyx_tp_clear_4dnet_eth, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_4dnet_eth, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_f_4dnet_3eth___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_eth, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ -}; +static PyObject *__pyx_pf_4dnet_4rand_12uint32(struct __pyx_obj_4dnet_rand *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("uint32", 0); + + /* "dnet.pyx":1381 + * def uint32(self): + * """Return a random 32-bit integer.""" + * return rand_uint32(self.rand) # <<<<<<<<<<<<<< + * + * def xrange(self, start, stop=None): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(rand_uint32(__pyx_v_self->rand)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; -static PyObject *__pyx_tp_new_4dnet_ip(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o; - return o; + /* "dnet.pyx":1379 + * return rand_uint16(self.rand) + * + * def uint32(self): # <<<<<<<<<<<<<< + * """Return a random 32-bit integer.""" + * return rand_uint32(self.rand) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.uint32", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static void __pyx_tp_dealloc_4dnet_ip(PyObject *o) { - struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o; +/* "dnet.pyx":1383 + * return rand_uint32(self.rand) + * + * def xrange(self, start, stop=None): # <<<<<<<<<<<<<< + * """xrange([start,] stop) -> xrange object + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_15xrange(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_4dnet_4rand_14xrange[] = "xrange([start,] stop) -> xrange object\n\n Return a random permutation iterator to walk an unsigned integer range,\n like xrange().\n "; +static PyObject *__pyx_pw_4dnet_4rand_15xrange(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_start = 0; + PyObject *__pyx_v_stop = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("xrange (wrapper)", 0); { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_2ip___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; - PyErr_Restore(etype, eval, etb); + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_stop,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "xrange") < 0)) __PYX_ERR(0, 1383, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_start = values[0]; + __pyx_v_stop = values[1]; } - (*o->ob_type->tp_free)(o); -} + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("xrange", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1383, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.rand.xrange", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_4rand_14xrange(((struct __pyx_obj_4dnet_rand *)__pyx_v_self), __pyx_v_start, __pyx_v_stop); -static int __pyx_tp_traverse_4dnet_ip(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o; - return 0; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_clear_4dnet_ip(PyObject *o) { - struct __pyx_obj_4dnet_ip *p = (struct __pyx_obj_4dnet_ip *)o; - return 0; -} +static PyObject *__pyx_pf_4dnet_4rand_14xrange(struct __pyx_obj_4dnet_rand *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_stop) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("xrange", 0); + + /* "dnet.pyx":1389 + * like xrange(). + * """ + * if stop == None: # <<<<<<<<<<<<<< + * return __rand_xrange(self, 0, start) + * else: + */ + __pyx_t_1 = PyObject_RichCompare(__pyx_v_stop, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1389, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1389, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "dnet.pyx":1390 + * """ + * if stop == None: + * return __rand_xrange(self, 0, start) # <<<<<<<<<<<<<< + * else: + * return __rand_xrange(self, start, stop) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self)); + __Pyx_INCREF(__pyx_int_0); + __Pyx_GIVEREF(__pyx_int_0); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_0); + __Pyx_INCREF(__pyx_v_start); + __Pyx_GIVEREF(__pyx_v_start); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_start); + __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4dnet___rand_xrange), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; -static struct PyMethodDef __pyx_methods_4dnet_ip[] = { - {"send", (PyCFunction)__pyx_f_4dnet_2ip_send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_2ip_send}, - {0, 0, 0, 0} -}; + /* "dnet.pyx":1389 + * like xrange(). + * """ + * if stop == None: # <<<<<<<<<<<<<< + * return __rand_xrange(self, 0, start) + * else: + */ + } -static PyNumberMethods __pyx_tp_as_number_ip = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; + /* "dnet.pyx":1392 + * return __rand_xrange(self, 0, start) + * else: + * return __rand_xrange(self, start, stop) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1392, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_self)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self)); + __Pyx_INCREF(__pyx_v_start); + __Pyx_GIVEREF(__pyx_v_start); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_start); + __Pyx_INCREF(__pyx_v_stop); + __Pyx_GIVEREF(__pyx_v_stop); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_stop); + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_4dnet___rand_xrange), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1392, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + } -static PySequenceMethods __pyx_tp_as_sequence_ip = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; + /* "dnet.pyx":1383 + * return rand_uint32(self.rand) + * + * def xrange(self, start, stop=None): # <<<<<<<<<<<<<< + * """xrange([start,] stop) -> xrange object + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.rand.xrange", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyMappingMethods __pyx_tp_as_mapping_ip = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; +/* "dnet.pyx":1394 + * return __rand_xrange(self, start, stop) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.rand: + * rand_close(self.rand) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_4rand_17__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_4rand_17__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_4rand_16__dealloc__(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} -static PyBufferProcs __pyx_tp_as_buffer_ip = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; +static void __pyx_pf_4dnet_4rand_16__dealloc__(struct __pyx_obj_4dnet_rand *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":1395 + * + * def __dealloc__(self): + * if self.rand: # <<<<<<<<<<<<<< + * rand_close(self.rand) + * + */ + __pyx_t_1 = (__pyx_v_self->rand != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1396 + * def __dealloc__(self): + * if self.rand: + * rand_close(self.rand) # <<<<<<<<<<<<<< + * + * # Modified (variable block length) TEA by Niels Provos + */ + (void)(rand_close(__pyx_v_self->rand)); + + /* "dnet.pyx":1395 + * + * def __dealloc__(self): + * if self.rand: # <<<<<<<<<<<<<< + * rand_close(self.rand) + * + */ + } -PyTypeObject __pyx_type_4dnet_ip = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.ip", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_ip), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_ip, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - &__pyx_tp_as_number_ip, /*tp_as_number*/ - &__pyx_tp_as_sequence_ip, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_ip, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_ip, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "ip() -> Raw IP object\n\n Open a raw IP socket for sending.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_ip, /*tp_traverse*/ - __pyx_tp_clear_4dnet_ip, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_4dnet_ip, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_f_4dnet_2ip___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_ip, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ -}; + /* "dnet.pyx":1394 + * return __rand_xrange(self, start, stop) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.rand: + * rand_close(self.rand) + */ -static PyObject *__pyx_tp_new_4dnet_addr(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o; - return o; + /* function exit code */ + __Pyx_RefNannyFinishContext(); } -static void __pyx_tp_dealloc_4dnet_addr(PyObject *o) { - struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o; - (*o->ob_type->tp_free)(o); +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_4rand_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_18__reduce_cython__(((struct __pyx_obj_4dnet_rand *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_traverse_4dnet_addr(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o; - return 0; +static PyObject *__pyx_pf_4dnet_4rand_18__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_rand *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_clear_4dnet_addr(PyObject *o) { - struct __pyx_obj_4dnet_addr *p = (struct __pyx_obj_4dnet_addr *)o; - return 0; +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_4rand_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_4rand_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_4rand_20__setstate_cython__(((struct __pyx_obj_4dnet_rand *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static PyObject *__pyx_getprop_4dnet_4addr_type(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_4type___get__(o); +static PyObject *__pyx_pf_4dnet_4rand_20__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_rand *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.rand.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_setprop_4dnet_4addr_type(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_4dnet_4addr_4type___set__(o, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; +/* "dnet.pyx":1411 + * cdef int left, right, kshift + * + * def __init__(self, r, start, stop): # <<<<<<<<<<<<<< + * cdef unsigned int bits + * + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_13__rand_xrange_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_13__rand_xrange_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_r = 0; + PyObject *__pyx_v_start = 0; + PyObject *__pyx_v_stop = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_r,&__pyx_n_s_start,&__pyx_n_s_stop,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 1411, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 1411, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1411, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v_r = values[0]; + __pyx_v_start = values[1]; + __pyx_v_stop = values[2]; } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1411, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.__rand_xrange.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_13__rand_xrange___init__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self), __pyx_v_r, __pyx_v_start, __pyx_v_stop); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static PyObject *__pyx_getprop_4dnet_4addr_bits(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_4bits___get__(o); -} - -static int __pyx_setprop_4dnet_4addr_bits(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_4dnet_4addr_4bits___set__(o, v); +static int __pyx_pf_4dnet_13__rand_xrange___init__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self, PyObject *__pyx_v_r, PyObject *__pyx_v_start, PyObject *__pyx_v_stop) { + unsigned int __pyx_v_bits; + int __pyx_r; + __Pyx_RefNannyDeclarations + rand_t *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":1414 + * cdef unsigned int bits + * + * self.rand = (r).rand # <<<<<<<<<<<<<< + * if PyLong_Check(start): + * self.start = PyLong_AsLong(start) + */ + __pyx_t_1 = ((struct __pyx_obj_4dnet_rand *)__pyx_v_r)->rand; + __pyx_v_self->rand = __pyx_t_1; + + /* "dnet.pyx":1415 + * + * self.rand = (r).rand + * if PyLong_Check(start): # <<<<<<<<<<<<<< + * self.start = PyLong_AsLong(start) + * elif PyLong_Check(start): + */ + __pyx_t_2 = (PyLong_Check(__pyx_v_start) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1416 + * self.rand = (r).rand + * if PyLong_Check(start): + * self.start = PyLong_AsLong(start) # <<<<<<<<<<<<<< + * elif PyLong_Check(start): + * self.start = PyLong_AsUnsignedLong(start) + */ + __pyx_v_self->start = PyLong_AsLong(__pyx_v_start); + + /* "dnet.pyx":1415 + * + * self.rand = (r).rand + * if PyLong_Check(start): # <<<<<<<<<<<<<< + * self.start = PyLong_AsLong(start) + * elif PyLong_Check(start): + */ + goto __pyx_L3; } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; + + /* "dnet.pyx":1417 + * if PyLong_Check(start): + * self.start = PyLong_AsLong(start) + * elif PyLong_Check(start): # <<<<<<<<<<<<<< + * self.start = PyLong_AsUnsignedLong(start) + * else: + */ + __pyx_t_2 = (PyLong_Check(__pyx_v_start) != 0); + if (likely(__pyx_t_2)) { + + /* "dnet.pyx":1418 + * self.start = PyLong_AsLong(start) + * elif PyLong_Check(start): + * self.start = PyLong_AsUnsignedLong(start) # <<<<<<<<<<<<<< + * else: + * raise TypeError, 'start must be an integer' + */ + __pyx_v_self->start = PyLong_AsUnsignedLong(__pyx_v_start); + + /* "dnet.pyx":1417 + * if PyLong_Check(start): + * self.start = PyLong_AsLong(start) + * elif PyLong_Check(start): # <<<<<<<<<<<<<< + * self.start = PyLong_AsUnsignedLong(start) + * else: + */ + goto __pyx_L3; } -} -static PyObject *__pyx_getprop_4dnet_4addr_data(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_4data___get__(o); -} + /* "dnet.pyx":1420 + * self.start = PyLong_AsUnsignedLong(start) + * else: + * raise TypeError, 'start must be an integer' # <<<<<<<<<<<<<< + * + * if PyLong_Check(start): + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_start_must_be_an_integer, 0, 0); + __PYX_ERR(0, 1420, __pyx_L1_error) + } + __pyx_L3:; -static PyObject *__pyx_getprop_4dnet_4addr_eth(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_3eth___get__(o); -} + /* "dnet.pyx":1422 + * raise TypeError, 'start must be an integer' + * + * if PyLong_Check(start): # <<<<<<<<<<<<<< + * self.max = PyLong_AsLong(stop) - self.start + * elif PyLong_Check(start): + */ + __pyx_t_2 = (PyLong_Check(__pyx_v_start) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1423 + * + * if PyLong_Check(start): + * self.max = PyLong_AsLong(stop) - self.start # <<<<<<<<<<<<<< + * elif PyLong_Check(start): + * self.max = PyLong_AsUnsignedLong(stop) - self.start + */ + __pyx_v_self->max = (PyLong_AsLong(__pyx_v_stop) - __pyx_v_self->start); + + /* "dnet.pyx":1422 + * raise TypeError, 'start must be an integer' + * + * if PyLong_Check(start): # <<<<<<<<<<<<<< + * self.max = PyLong_AsLong(stop) - self.start + * elif PyLong_Check(start): + */ + goto __pyx_L4; + } -static int __pyx_setprop_4dnet_4addr_eth(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_4dnet_4addr_3eth___set__(o, v); + /* "dnet.pyx":1424 + * if PyLong_Check(start): + * self.max = PyLong_AsLong(stop) - self.start + * elif PyLong_Check(start): # <<<<<<<<<<<<<< + * self.max = PyLong_AsUnsignedLong(stop) - self.start + * else: + */ + __pyx_t_2 = (PyLong_Check(__pyx_v_start) != 0); + if (likely(__pyx_t_2)) { + + /* "dnet.pyx":1425 + * self.max = PyLong_AsLong(stop) - self.start + * elif PyLong_Check(start): + * self.max = PyLong_AsUnsignedLong(stop) - self.start # <<<<<<<<<<<<<< + * else: + * raise TypeError, 'stop must be an integer' + */ + __pyx_v_self->max = (PyLong_AsUnsignedLong(__pyx_v_stop) - __pyx_v_self->start); + + /* "dnet.pyx":1424 + * if PyLong_Check(start): + * self.max = PyLong_AsLong(stop) - self.start + * elif PyLong_Check(start): # <<<<<<<<<<<<<< + * self.max = PyLong_AsUnsignedLong(stop) - self.start + * else: + */ + goto __pyx_L4; } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; + + /* "dnet.pyx":1427 + * self.max = PyLong_AsUnsignedLong(stop) - self.start + * else: + * raise TypeError, 'stop must be an integer' # <<<<<<<<<<<<<< + * + * # XXX - permute range once only! + */ + /*else*/ { + __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_stop_must_be_an_integer, 0, 0); + __PYX_ERR(0, 1427, __pyx_L1_error) } -} + __pyx_L4:; -static PyObject *__pyx_getprop_4dnet_4addr_ip(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_2ip___get__(o); -} + /* "dnet.pyx":1430 + * + * # XXX - permute range once only! + * rand_get(self.rand, self.sbox, sizeof(self.sbox)) # <<<<<<<<<<<<<< + * + * bits = 0 + */ + (void)(rand_get(__pyx_v_self->rand, ((char *)__pyx_v_self->sbox), (sizeof(__pyx_v_self->sbox)))); + + /* "dnet.pyx":1432 + * rand_get(self.rand, self.sbox, sizeof(self.sbox)) + * + * bits = 0 # <<<<<<<<<<<<<< + * while self.max > (1 << bits): + * bits = bits + 1 + */ + __pyx_v_bits = 0; -static int __pyx_setprop_4dnet_4addr_ip(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_4dnet_4addr_2ip___set__(o, v); + /* "dnet.pyx":1433 + * + * bits = 0 + * while self.max > (1 << bits): # <<<<<<<<<<<<<< + * bits = bits + 1 + * + */ + while (1) { + __pyx_t_2 = ((__pyx_v_self->max > (1 << __pyx_v_bits)) != 0); + if (!__pyx_t_2) break; + + /* "dnet.pyx":1434 + * bits = 0 + * while self.max > (1 << bits): + * bits = bits + 1 # <<<<<<<<<<<<<< + * + * self.left = int(bits / 2) + */ + __pyx_v_bits = (__pyx_v_bits + 1); } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; - } -} - -static PyObject *__pyx_getprop_4dnet_4addr_ip6(PyObject *o, void *x) { - return __pyx_f_4dnet_4addr_3ip6___get__(o); -} -static int __pyx_setprop_4dnet_4addr_ip6(PyObject *o, PyObject *v, void *x) { - if (v) { - return __pyx_f_4dnet_4addr_3ip6___set__(o, v); + /* "dnet.pyx":1436 + * bits = bits + 1 + * + * self.left = int(bits / 2) # <<<<<<<<<<<<<< + * self.right = bits - self.left + * self.mask = (1 << bits) - 1 + */ + __pyx_v_self->left = ((int)(((double)__pyx_v_bits) / 2.0)); + + /* "dnet.pyx":1437 + * + * self.left = int(bits / 2) + * self.right = bits - self.left # <<<<<<<<<<<<<< + * self.mask = (1 << bits) - 1 + * + */ + __pyx_v_self->right = (__pyx_v_bits - __pyx_v_self->left); + + /* "dnet.pyx":1438 + * self.left = int(bits / 2) + * self.right = bits - self.left + * self.mask = (1 << bits) - 1 # <<<<<<<<<<<<<< + * + * if TEASBOXSIZE < (1 << self.left): + */ + __pyx_v_self->mask = ((1 << __pyx_v_bits) - 1); + + /* "dnet.pyx":1440 + * self.mask = (1 << bits) - 1 + * + * if TEASBOXSIZE < (1 << self.left): # <<<<<<<<<<<<<< + * self.sboxmask = TEASBOXSIZE - 1 + * self.kshift = TEASBOXSHIFT + */ + __pyx_t_2 = ((__pyx_e_4dnet_TEASBOXSIZE < (1 << __pyx_v_self->left)) != 0); + if (__pyx_t_2) { + + /* "dnet.pyx":1441 + * + * if TEASBOXSIZE < (1 << self.left): + * self.sboxmask = TEASBOXSIZE - 1 # <<<<<<<<<<<<<< + * self.kshift = TEASBOXSHIFT + * else: + */ + __pyx_v_self->sboxmask = (__pyx_e_4dnet_TEASBOXSIZE - 1); + + /* "dnet.pyx":1442 + * if TEASBOXSIZE < (1 << self.left): + * self.sboxmask = TEASBOXSIZE - 1 + * self.kshift = TEASBOXSHIFT # <<<<<<<<<<<<<< + * else: + * self.sboxmask = (1 << self.left) - 1 + */ + __pyx_v_self->kshift = __pyx_e_4dnet_TEASBOXSHIFT; + + /* "dnet.pyx":1440 + * self.mask = (1 << bits) - 1 + * + * if TEASBOXSIZE < (1 << self.left): # <<<<<<<<<<<<<< + * self.sboxmask = TEASBOXSIZE - 1 + * self.kshift = TEASBOXSHIFT + */ + goto __pyx_L7; } - else { - PyErr_SetString(PyExc_NotImplementedError, "__del__"); - return -1; + + /* "dnet.pyx":1444 + * self.kshift = TEASBOXSHIFT + * else: + * self.sboxmask = (1 << self.left) - 1 # <<<<<<<<<<<<<< + * self.kshift = self.left + * + */ + /*else*/ { + __pyx_v_self->sboxmask = ((1 << __pyx_v_self->left) - 1); + + /* "dnet.pyx":1445 + * else: + * self.sboxmask = (1 << self.left) - 1 + * self.kshift = self.left # <<<<<<<<<<<<<< + * + * def __iter__(self): + */ + __pyx_t_3 = __pyx_v_self->left; + __pyx_v_self->kshift = __pyx_t_3; } -} + __pyx_L7:; -static struct PyMethodDef __pyx_methods_4dnet_addr[] = { - {"bcast", (PyCFunction)__pyx_f_4dnet_4addr_bcast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4addr_bcast}, - {"net", (PyCFunction)__pyx_f_4dnet_4addr_net, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4addr_net}, - {"__copy__", (PyCFunction)__pyx_f_4dnet_4addr___copy__, METH_VARARGS|METH_KEYWORDS, 0}, - {0, 0, 0, 0} -}; + /* "dnet.pyx":1411 + * cdef int left, right, kshift + * + * def __init__(self, r, start, stop): # <<<<<<<<<<<<<< + * cdef unsigned int bits + * + */ -static struct PyGetSetDef __pyx_getsets_4dnet_addr[] = { - {"type", __pyx_getprop_4dnet_4addr_type, __pyx_setprop_4dnet_4addr_type, __pyx_k1, 0}, - {"bits", __pyx_getprop_4dnet_4addr_bits, __pyx_setprop_4dnet_4addr_bits, __pyx_k2, 0}, - {"data", __pyx_getprop_4dnet_4addr_data, 0, __pyx_k3, 0}, - {"eth", __pyx_getprop_4dnet_4addr_eth, __pyx_setprop_4dnet_4addr_eth, __pyx_k4, 0}, - {"ip", __pyx_getprop_4dnet_4addr_ip, __pyx_setprop_4dnet_4addr_ip, __pyx_k5, 0}, - {"ip6", __pyx_getprop_4dnet_4addr_ip6, __pyx_setprop_4dnet_4addr_ip6, __pyx_k6, 0}, - {0, 0, 0, 0, 0} -}; + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("dnet.__rand_xrange.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyNumberMethods __pyx_tp_as_number_addr = { - __pyx_f_4dnet_4addr___add__, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - __pyx_f_4dnet_4addr___int__, /*nb_int*/ - __pyx_f_4dnet_4addr___long__, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; +/* "dnet.pyx":1447 + * self.kshift = self.left + * + * def __iter__(self): # <<<<<<<<<<<<<< + * self.cur = self.enc = 0 + * # XXX - rewind iterator, but do not permute range again! + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_3__iter__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_3__iter__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_13__rand_xrange_2__iter__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PySequenceMethods __pyx_tp_as_sequence_addr = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - __pyx_f_4dnet_4addr___contains__, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; +static PyObject *__pyx_pf_4dnet_13__rand_xrange_2__iter__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__iter__", 0); + + /* "dnet.pyx":1448 + * + * def __iter__(self): + * self.cur = self.enc = 0 # <<<<<<<<<<<<<< + * # XXX - rewind iterator, but do not permute range again! + * return self + */ + __pyx_v_self->cur = 0; + __pyx_v_self->enc = 0; + + /* "dnet.pyx":1450 + * self.cur = self.enc = 0 + * # XXX - rewind iterator, but do not permute range again! + * return self # <<<<<<<<<<<<<< + * + * def __len__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(((PyObject *)__pyx_v_self)); + __pyx_r = ((PyObject *)__pyx_v_self); + goto __pyx_L0; -static PyMappingMethods __pyx_tp_as_mapping_addr = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; + /* "dnet.pyx":1447 + * self.kshift = self.left + * + * def __iter__(self): # <<<<<<<<<<<<<< + * self.cur = self.enc = 0 + * # XXX - rewind iterator, but do not permute range again! + */ -static PyBufferProcs __pyx_tp_as_buffer_addr = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; + /* function exit code */ + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -PyTypeObject __pyx_type_4dnet_addr = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.addr", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_addr), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_addr, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - __pyx_f_4dnet_4addr___cmp__, /*tp_compare*/ - __pyx_f_4dnet_4addr___repr__, /*tp_repr*/ - &__pyx_tp_as_number_addr, /*tp_as_number*/ - &__pyx_tp_as_sequence_addr, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_addr, /*tp_as_mapping*/ - __pyx_f_4dnet_4addr___hash__, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_addr, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "addr(addrtxt=None, type=ADDR_TYPE_NONE) -> network address object\n\n Create a network address object, optionally initialized from a\n human-readable Ethernet, IP, or IPv6 address string.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_addr, /*tp_traverse*/ - __pyx_tp_clear_4dnet_addr, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_4addr___iter__, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_4dnet_addr, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_4dnet_addr, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_f_4dnet_4addr___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_addr, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ -}; +/* "dnet.pyx":1452 + * return self + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self.max + * + */ + +/* Python wrapper */ +static Py_ssize_t __pyx_pw_4dnet_13__rand_xrange_5__len__(PyObject *__pyx_v_self); /*proto*/ +static Py_ssize_t __pyx_pw_4dnet_13__rand_xrange_5__len__(PyObject *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_13__rand_xrange_4__len__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)); -static PyObject *__pyx_tp_new_4dnet___addr_ip4_iter(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o; - return o; + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static void __pyx_tp_dealloc_4dnet___addr_ip4_iter(PyObject *o) { - struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o; - (*o->ob_type->tp_free)(o); -} +static Py_ssize_t __pyx_pf_4dnet_13__rand_xrange_4__len__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self) { + Py_ssize_t __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__len__", 0); + + /* "dnet.pyx":1453 + * + * def __len__(self): + * return self.max # <<<<<<<<<<<<<< + * + * def __next__(self): + */ + __pyx_r = __pyx_v_self->max; + goto __pyx_L0; -static int __pyx_tp_traverse_4dnet___addr_ip4_iter(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o; - return 0; + /* "dnet.pyx":1452 + * return self + * + * def __len__(self): # <<<<<<<<<<<<<< + * return self.max + * + */ + + /* function exit code */ + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_clear_4dnet___addr_ip4_iter(PyObject *o) { - struct __pyx_obj_4dnet___addr_ip4_iter *p = (struct __pyx_obj_4dnet___addr_ip4_iter *)o; - return 0; +/* "dnet.pyx":1455 + * return self.max + * + * def __next__(self): # <<<<<<<<<<<<<< + * cdef unsigned long c, sum + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_7__next__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_7__next__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__next__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_13__rand_xrange_6__next__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static struct PyMethodDef __pyx_methods_4dnet___addr_ip4_iter[] = { - {0, 0, 0, 0} -}; +static PyObject *__pyx_pf_4dnet_13__rand_xrange_6__next__(struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self) { + unsigned long __pyx_v_c; + unsigned long __pyx_v_sum; + CYTHON_UNUSED long __pyx_v_i; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + unsigned long __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__next__", 0); + + /* "dnet.pyx":1458 + * cdef unsigned long c, sum + * + * if self.cur == self.max: # <<<<<<<<<<<<<< + * raise StopIteration + * self.cur = self.cur + 1 + */ + __pyx_t_1 = ((__pyx_v_self->cur == __pyx_v_self->max) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1459 + * + * if self.cur == self.max: + * raise StopIteration # <<<<<<<<<<<<<< + * self.cur = self.cur + 1 + * while 1: + */ + __Pyx_Raise(__pyx_builtin_StopIteration, 0, 0, 0); + __PYX_ERR(0, 1459, __pyx_L1_error) + + /* "dnet.pyx":1458 + * cdef unsigned long c, sum + * + * if self.cur == self.max: # <<<<<<<<<<<<<< + * raise StopIteration + * self.cur = self.cur + 1 + */ + } -static PyNumberMethods __pyx_tp_as_number___addr_ip4_iter = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; + /* "dnet.pyx":1460 + * if self.cur == self.max: + * raise StopIteration + * self.cur = self.cur + 1 # <<<<<<<<<<<<<< + * while 1: + * c = self.enc + */ + __pyx_v_self->cur = (__pyx_v_self->cur + 1); + + /* "dnet.pyx":1461 + * raise StopIteration + * self.cur = self.cur + 1 + * while 1: # <<<<<<<<<<<<<< + * c = self.enc + * self.enc = self.enc + 1 + */ + while (1) { -static PySequenceMethods __pyx_tp_as_sequence___addr_ip4_iter = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; + /* "dnet.pyx":1462 + * self.cur = self.cur + 1 + * while 1: + * c = self.enc # <<<<<<<<<<<<<< + * self.enc = self.enc + 1 + * sum = 0 + */ + __pyx_t_2 = __pyx_v_self->enc; + __pyx_v_c = __pyx_t_2; + + /* "dnet.pyx":1463 + * while 1: + * c = self.enc + * self.enc = self.enc + 1 # <<<<<<<<<<<<<< + * sum = 0 + * for i from 0 < i < TEAROUNDS: + */ + __pyx_v_self->enc = (__pyx_v_self->enc + 1); + + /* "dnet.pyx":1464 + * c = self.enc + * self.enc = self.enc + 1 + * sum = 0 # <<<<<<<<<<<<<< + * for i from 0 < i < TEAROUNDS: + * sum = sum + TEADELTA + */ + __pyx_v_sum = 0; -static PyMappingMethods __pyx_tp_as_mapping___addr_ip4_iter = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; + /* "dnet.pyx":1465 + * self.enc = self.enc + 1 + * sum = 0 + * for i from 0 < i < TEAROUNDS: # <<<<<<<<<<<<<< + * sum = sum + TEADELTA + * c = c ^ (self.sbox[(c ^ sum) & self.sboxmask] << self.kshift) + */ + __pyx_t_3 = __pyx_e_4dnet_TEAROUNDS; + for (__pyx_v_i = 0+1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) { + + /* "dnet.pyx":1466 + * sum = 0 + * for i from 0 < i < TEAROUNDS: + * sum = sum + TEADELTA # <<<<<<<<<<<<<< + * c = c ^ (self.sbox[(c ^ sum) & self.sboxmask] << self.kshift) + * c = c + sum + */ + __pyx_v_sum = (__pyx_v_sum + __pyx_e_4dnet_TEADELTA); -static PyBufferProcs __pyx_tp_as_buffer___addr_ip4_iter = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; + /* "dnet.pyx":1467 + * for i from 0 < i < TEAROUNDS: + * sum = sum + TEADELTA + * c = c ^ (self.sbox[(c ^ sum) & self.sboxmask] << self.kshift) # <<<<<<<<<<<<<< + * c = c + sum + * c = c & self.mask + */ + __pyx_v_c = (__pyx_v_c ^ ((__pyx_v_self->sbox[((__pyx_v_c ^ __pyx_v_sum) & __pyx_v_self->sboxmask)]) << __pyx_v_self->kshift)); + + /* "dnet.pyx":1468 + * sum = sum + TEADELTA + * c = c ^ (self.sbox[(c ^ sum) & self.sboxmask] << self.kshift) + * c = c + sum # <<<<<<<<<<<<<< + * c = c & self.mask + * c = ((c << self.left) | (c >> self.right)) & self.mask + */ + __pyx_v_c = (__pyx_v_c + __pyx_v_sum); -PyTypeObject __pyx_type_4dnet___addr_ip4_iter = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.__addr_ip4_iter", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet___addr_ip4_iter), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet___addr_ip4_iter, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - &__pyx_tp_as_number___addr_ip4_iter, /*tp_as_number*/ - &__pyx_tp_as_sequence___addr_ip4_iter, /*tp_as_sequence*/ - &__pyx_tp_as_mapping___addr_ip4_iter, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - &__pyx_tp_as_buffer___addr_ip4_iter, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_4dnet___addr_ip4_iter, /*tp_traverse*/ - __pyx_tp_clear_4dnet___addr_ip4_iter, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - __pyx_f_4dnet_15__addr_ip4_iter___next__, /*tp_iternext*/ - __pyx_methods_4dnet___addr_ip4_iter, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_f_4dnet_15__addr_ip4_iter___init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_4dnet___addr_ip4_iter, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ -}; + /* "dnet.pyx":1469 + * c = c ^ (self.sbox[(c ^ sum) & self.sboxmask] << self.kshift) + * c = c + sum + * c = c & self.mask # <<<<<<<<<<<<<< + * c = ((c << self.left) | (c >> self.right)) & self.mask + * if c < self.max: + */ + __pyx_v_c = (__pyx_v_c & __pyx_v_self->mask); + + /* "dnet.pyx":1470 + * c = c + sum + * c = c & self.mask + * c = ((c << self.left) | (c >> self.right)) & self.mask # <<<<<<<<<<<<<< + * if c < self.max: + * break + */ + __pyx_v_c = (((__pyx_v_c << __pyx_v_self->left) | (__pyx_v_c >> __pyx_v_self->right)) & __pyx_v_self->mask); + } -static PyObject *__pyx_tp_new_4dnet_arp(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o; - return o; + /* "dnet.pyx":1471 + * c = c & self.mask + * c = ((c << self.left) | (c >> self.right)) & self.mask + * if c < self.max: # <<<<<<<<<<<<<< + * break + * return self.start + c + */ + __pyx_t_1 = ((__pyx_v_c < __pyx_v_self->max) != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1472 + * c = ((c << self.left) | (c >> self.right)) & self.mask + * if c < self.max: + * break # <<<<<<<<<<<<<< + * return self.start + c + * + */ + goto __pyx_L5_break; + + /* "dnet.pyx":1471 + * c = c & self.mask + * c = ((c << self.left) | (c >> self.right)) & self.mask + * if c < self.max: # <<<<<<<<<<<<<< + * break + * return self.start + c + */ + } + } + __pyx_L5_break:; + + /* "dnet.pyx":1473 + * if c < self.max: + * break + * return self.start + c # <<<<<<<<<<<<<< + * + * # + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyInt_From_unsigned_long((__pyx_v_self->start + __pyx_v_c)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1473, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1455 + * return self.max + * + * def __next__(self): # <<<<<<<<<<<<<< + * cdef unsigned long c, sum + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dnet.__rand_xrange.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static void __pyx_tp_dealloc_4dnet_arp(PyObject *o) { - struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o; - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_3arp___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; - PyErr_Restore(etype, eval, etb); - } - (*o->ob_type->tp_free)(o); +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_13__rand_xrange_8__reduce_cython__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_traverse_4dnet_arp(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o; - return 0; +static PyObject *__pyx_pf_4dnet_13__rand_xrange_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.__rand_xrange.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static int __pyx_tp_clear_4dnet_arp(PyObject *o) { - struct __pyx_obj_4dnet_arp *p = (struct __pyx_obj_4dnet_arp *)o; - return 0; +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_13__rand_xrange_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_13__rand_xrange_10__setstate_cython__(((struct __pyx_obj_4dnet___rand_xrange *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; } -static struct PyMethodDef __pyx_methods_4dnet_arp[] = { - {"add", (PyCFunction)__pyx_f_4dnet_3arp_add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_add}, - {"delete", (PyCFunction)__pyx_f_4dnet_3arp_delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_delete}, - {"get", (PyCFunction)__pyx_f_4dnet_3arp_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_get}, - {"loop", (PyCFunction)__pyx_f_4dnet_3arp_loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_loop}, - {0, 0, 0, 0} -}; +static PyObject *__pyx_pf_4dnet_13__rand_xrange_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet___rand_xrange *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.__rand_xrange.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PyNumberMethods __pyx_tp_as_number_arp = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; +/* "dnet.pyx":1502 + * cdef int mtu + * + * def __init__(self, addr src, addr dst, mtu=1500): # <<<<<<<<<<<<<< + * self.tun = tun_open(&src._addr, &dst._addr, mtu) + * self.mtu = mtu + */ + +/* Python wrapper */ +static int __pyx_pw_4dnet_3tun_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_4dnet_3tun_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + struct __pyx_obj_4dnet_addr *__pyx_v_src = 0; + struct __pyx_obj_4dnet_addr *__pyx_v_dst = 0; + PyObject *__pyx_v_mtu = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_src,&__pyx_n_s_dst,&__pyx_n_s_mtu,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)__pyx_int_1500); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_src)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dst)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, 1); __PYX_ERR(0, 1502, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mtu); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1502, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_src = ((struct __pyx_obj_4dnet_addr *)values[0]); + __pyx_v_dst = ((struct __pyx_obj_4dnet_addr *)values[1]); + __pyx_v_mtu = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1502, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.tun.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_src), __pyx_ptype_4dnet_addr, 1, "src", 0))) __PYX_ERR(0, 1502, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dst), __pyx_ptype_4dnet_addr, 1, "dst", 0))) __PYX_ERR(0, 1502, __pyx_L1_error) + __pyx_r = __pyx_pf_4dnet_3tun___init__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self), __pyx_v_src, __pyx_v_dst, __pyx_v_mtu); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} -static PySequenceMethods __pyx_tp_as_sequence_arp = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; +static int __pyx_pf_4dnet_3tun___init__(struct __pyx_obj_4dnet_tun *__pyx_v_self, struct __pyx_obj_4dnet_addr *__pyx_v_src, struct __pyx_obj_4dnet_addr *__pyx_v_dst, PyObject *__pyx_v_mtu) { + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "dnet.pyx":1503 + * + * def __init__(self, addr src, addr dst, mtu=1500): + * self.tun = tun_open(&src._addr, &dst._addr, mtu) # <<<<<<<<<<<<<< + * self.mtu = mtu + * if not self.tun: + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_mtu); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1503, __pyx_L1_error) + __pyx_v_self->tun = tun_open((&__pyx_v_src->_addr), (&__pyx_v_dst->_addr), __pyx_t_1); + + /* "dnet.pyx":1504 + * def __init__(self, addr src, addr dst, mtu=1500): + * self.tun = tun_open(&src._addr, &dst._addr, mtu) + * self.mtu = mtu # <<<<<<<<<<<<<< + * if not self.tun: + * raise OSError, __oserror() + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_mtu); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1504, __pyx_L1_error) + __pyx_v_self->mtu = __pyx_t_1; + + /* "dnet.pyx":1505 + * self.tun = tun_open(&src._addr, &dst._addr, mtu) + * self.mtu = mtu + * if not self.tun: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * self.buf = malloc(mtu) + */ + __pyx_t_2 = ((!(__pyx_v_self->tun != 0)) != 0); + if (unlikely(__pyx_t_2)) { + + /* "dnet.pyx":1506 + * self.mtu = mtu + * if not self.tun: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * self.buf = malloc(mtu) + * + */ + __pyx_t_3 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1506, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_3, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(0, 1506, __pyx_L1_error) + + /* "dnet.pyx":1505 + * self.tun = tun_open(&src._addr, &dst._addr, mtu) + * self.mtu = mtu + * if not self.tun: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * self.buf = malloc(mtu) + */ + } -static PyMappingMethods __pyx_tp_as_mapping_arp = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; + /* "dnet.pyx":1507 + * if not self.tun: + * raise OSError, __oserror() + * self.buf = malloc(mtu) # <<<<<<<<<<<<<< + * + * property name: + */ + __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_mtu); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1507, __pyx_L1_error) + __pyx_v_self->buf = malloc(__pyx_t_1); + + /* "dnet.pyx":1502 + * cdef int mtu + * + * def __init__(self, addr src, addr dst, mtu=1500): # <<<<<<<<<<<<<< + * self.tun = tun_open(&src._addr, &dst._addr, mtu) + * self.mtu = mtu + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dnet.tun.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1511 + * property name: + * """Tunnel interface name.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return tun_name(self.tun) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_4name_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_3tun_4name_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_4name___get__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_4name___get__(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":1512 + * """Tunnel interface name.""" + * def __get__(self): + * return tun_name(self.tun) # <<<<<<<<<<<<<< + * + * property fd: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyStr_FromString(tun_name(__pyx_v_self->tun)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1512, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1511 + * property name: + * """Tunnel interface name.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return tun_name(self.tun) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.tun.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1516 + * property fd: + * """File descriptor for tunnel handle.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return tun_fileno(self.tun) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_2fd_1__get__(PyObject *__pyx_v_self); /*proto*/ +static PyObject *__pyx_pw_4dnet_3tun_2fd_1__get__(PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_2fd___get__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_2fd___get__(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__get__", 0); + + /* "dnet.pyx":1517 + * """File descriptor for tunnel handle.""" + * def __get__(self): + * return tun_fileno(self.tun) # <<<<<<<<<<<<<< + * + * def fileno(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(tun_fileno(__pyx_v_self->tun)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1517, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1516 + * property fd: + * """File descriptor for tunnel handle.""" + * def __get__(self): # <<<<<<<<<<<<<< + * return tun_fileno(self.tun) + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.tun.fd.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1519 + * return tun_fileno(self.tun) + * + * def fileno(self): # <<<<<<<<<<<<<< + * """Return file descriptor for tunnel handle.""" + * return tun_fileno(self.tun) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_3fileno(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_3tun_2fileno[] = "Return file descriptor for tunnel handle."; +static PyObject *__pyx_pw_4dnet_3tun_3fileno(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fileno (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_2fileno(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_2fileno(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fileno", 0); + + /* "dnet.pyx":1521 + * def fileno(self): + * """Return file descriptor for tunnel handle.""" + * return tun_fileno(self.tun) # <<<<<<<<<<<<<< + * + * def send(self, pkt): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int(tun_fileno(__pyx_v_self->tun)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1519 + * return tun_fileno(self.tun) + * + * def fileno(self): # <<<<<<<<<<<<<< + * """Return file descriptor for tunnel handle.""" + * return tun_fileno(self.tun) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.tun.fileno", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1523 + * return tun_fileno(self.tun) + * + * def send(self, pkt): # <<<<<<<<<<<<<< + * """Send an IP packet, returning the number of bytes sent + * or -1 on failure. + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_5send(PyObject *__pyx_v_self, PyObject *__pyx_v_pkt); /*proto*/ +static char __pyx_doc_4dnet_3tun_4send[] = "Send an IP packet, returning the number of bytes sent\n or -1 on failure.\n\n Arguments:\n pkt -- binary string representing an IP packet\n "; +static PyObject *__pyx_pw_4dnet_3tun_5send(PyObject *__pyx_v_self, PyObject *__pyx_v_pkt) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("send (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_4send(((struct __pyx_obj_4dnet_tun *)__pyx_v_self), ((PyObject *)__pyx_v_pkt)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_4send(struct __pyx_obj_4dnet_tun *__pyx_v_self, PyObject *__pyx_v_pkt) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("send", 0); + + /* "dnet.pyx":1530 + * pkt -- binary string representing an IP packet + * """ + * return tun_send(self.tun, pkt, PyBytes_Size(pkt)) # <<<<<<<<<<<<<< + * + * def recv(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_AsWritableString(__pyx_v_pkt); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(0, 1530, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_int(tun_send(__pyx_v_self->tun, __pyx_t_1, PyBytes_Size(__pyx_v_pkt))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1523 + * return tun_fileno(self.tun) + * + * def send(self, pkt): # <<<<<<<<<<<<<< + * """Send an IP packet, returning the number of bytes sent + * or -1 on failure. + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.tun.send", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1532 + * return tun_send(self.tun, pkt, PyBytes_Size(pkt)) + * + * def recv(self): # <<<<<<<<<<<<<< + * """Return the next packet delivered to the tunnel interface.""" + * cdef int n + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_7recv(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_4dnet_3tun_6recv[] = "Return the next packet delivered to the tunnel interface."; +static PyObject *__pyx_pw_4dnet_3tun_7recv(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("recv (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_6recv(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_6recv(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + int __pyx_v_n; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("recv", 0); + + /* "dnet.pyx":1535 + * """Return the next packet delivered to the tunnel interface.""" + * cdef int n + * n = tun_recv(self.tun, self.buf, self.mtu) # <<<<<<<<<<<<<< + * if n < 0: + * raise OSError, __oserror() + */ + __pyx_v_n = tun_recv(__pyx_v_self->tun, __pyx_v_self->buf, __pyx_v_self->mtu); + + /* "dnet.pyx":1536 + * cdef int n + * n = tun_recv(self.tun, self.buf, self.mtu) + * if n < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(self.buf, n) + */ + __pyx_t_1 = ((__pyx_v_n < 0) != 0); + if (unlikely(__pyx_t_1)) { + + /* "dnet.pyx":1537 + * n = tun_recv(self.tun, self.buf, self.mtu) + * if n < 0: + * raise OSError, __oserror() # <<<<<<<<<<<<<< + * return PyBytes_FromStringAndSize(self.buf, n) + * + */ + __pyx_t_2 = __pyx_f_4dnet___oserror(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1537, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_builtin_OSError, __pyx_t_2, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 1537, __pyx_L1_error) + + /* "dnet.pyx":1536 + * cdef int n + * n = tun_recv(self.tun, self.buf, self.mtu) + * if n < 0: # <<<<<<<<<<<<<< + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(self.buf, n) + */ + } + + /* "dnet.pyx":1538 + * if n < 0: + * raise OSError, __oserror() + * return PyBytes_FromStringAndSize(self.buf, n) # <<<<<<<<<<<<<< + * + * def close(self): + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_self->buf, __pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1538, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "dnet.pyx":1532 + * return tun_send(self.tun, pkt, PyBytes_Size(pkt)) + * + * def recv(self): # <<<<<<<<<<<<<< + * """Return the next packet delivered to the tunnel interface.""" + * cdef int n + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("dnet.tun.recv", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1540 + * return PyBytes_FromStringAndSize(self.buf, n) + * + * def close(self): # <<<<<<<<<<<<<< + * self.tun = tun_close(self.tun) + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_9close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_3tun_9close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("close (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_8close(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_8close(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("close", 0); + + /* "dnet.pyx":1541 + * + * def close(self): + * self.tun = tun_close(self.tun) # <<<<<<<<<<<<<< + * + * def __dealloc__(self): + */ + __pyx_v_self->tun = tun_close(__pyx_v_self->tun); + + /* "dnet.pyx":1540 + * return PyBytes_FromStringAndSize(self.buf, n) + * + * def close(self): # <<<<<<<<<<<<<< + * self.tun = tun_close(self.tun) + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dnet.pyx":1543 + * self.tun = tun_close(self.tun) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.buf: + * free(self.buf) + */ + +/* Python wrapper */ +static void __pyx_pw_4dnet_3tun_11__dealloc__(PyObject *__pyx_v_self); /*proto*/ +static void __pyx_pw_4dnet_3tun_11__dealloc__(PyObject *__pyx_v_self) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); + __pyx_pf_4dnet_3tun_10__dealloc__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +static void __pyx_pf_4dnet_3tun_10__dealloc__(struct __pyx_obj_4dnet_tun *__pyx_v_self) { + __Pyx_RefNannyDeclarations + int __pyx_t_1; + __Pyx_RefNannySetupContext("__dealloc__", 0); + + /* "dnet.pyx":1544 + * + * def __dealloc__(self): + * if self.buf: # <<<<<<<<<<<<<< + * free(self.buf) + * if self.tun: + */ + __pyx_t_1 = (__pyx_v_self->buf != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1545 + * def __dealloc__(self): + * if self.buf: + * free(self.buf) # <<<<<<<<<<<<<< + * if self.tun: + * tun_close(self.tun) + */ + free(__pyx_v_self->buf); + + /* "dnet.pyx":1544 + * + * def __dealloc__(self): + * if self.buf: # <<<<<<<<<<<<<< + * free(self.buf) + * if self.tun: + */ + } + + /* "dnet.pyx":1546 + * if self.buf: + * free(self.buf) + * if self.tun: # <<<<<<<<<<<<<< + * tun_close(self.tun) + */ + __pyx_t_1 = (__pyx_v_self->tun != 0); + if (__pyx_t_1) { + + /* "dnet.pyx":1547 + * free(self.buf) + * if self.tun: + * tun_close(self.tun) # <<<<<<<<<<<<<< + */ + (void)(tun_close(__pyx_v_self->tun)); + + /* "dnet.pyx":1546 + * if self.buf: + * free(self.buf) + * if self.tun: # <<<<<<<<<<<<<< + * tun_close(self.tun) + */ + } + + /* "dnet.pyx":1543 + * self.tun = tun_close(self.tun) + * + * def __dealloc__(self): # <<<<<<<<<<<<<< + * if self.buf: + * free(self.buf) + */ -static PyBufferProcs __pyx_tp_as_buffer_arp = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ + /* function exit code */ + __Pyx_RefNannyFinishContext(); +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static PyObject *__pyx_pw_4dnet_3tun_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_12__reduce_cython__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_tun *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 2, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.tun.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_3tun_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ +static PyObject *__pyx_pw_4dnet_3tun_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + __pyx_r = __pyx_pf_4dnet_3tun_14__setstate_cython__(((struct __pyx_obj_4dnet_tun *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_3tun_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_4dnet_tun *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 0); + + /* "(tree fragment)":4 + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 4, __pyx_L1_error) + + /* "(tree fragment)":3 + * def __reduce_cython__(self): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dnet.tun.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle___addr_ip4_iter(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_4dnet_37__pyx_unpickle___addr_ip4_iter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_4dnet_37__pyx_unpickle___addr_ip4_iter = {"__pyx_unpickle___addr_ip4_iter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_37__pyx_unpickle___addr_ip4_iter, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_4dnet_37__pyx_unpickle___addr_ip4_iter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle___addr_ip4_iter (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + PyObject* values[3] = {0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___addr_ip4_iter", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___addr_ip4_iter", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle___addr_ip4_iter") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___addr_ip4_iter", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("dnet.__pyx_unpickle___addr_ip4_iter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_4dnet_36__pyx_unpickle___addr_ip4_iter(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_4dnet_36__pyx_unpickle___addr_ip4_iter(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle___addr_ip4_iter", 0); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xd0a7020: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + */ + __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd0a7020) != 0); + if (__pyx_t_1) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum != 0xd0a7020: + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) + */ + __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_2); + __pyx_v___pyx_PickleError = __pyx_t_2; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum != 0xd0a7020: + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) # <<<<<<<<<<<<<< + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_INCREF(__pyx_v___pyx_PickleError); + __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0, 0); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum != 0xd0a7020: # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_4dnet___addr_ip4_iter), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v___pyx_result = __pyx_t_3; + __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_1 = (__pyx_v___pyx_state != Py_None); + __pyx_t_6 = (__pyx_t_1 != 0); + if (__pyx_t_6) { + + /* "(tree fragment)":9 + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_3 = __pyx_f_4dnet___pyx_unpickle___addr_ip4_iter__set_state(((struct __pyx_obj_4dnet___addr_ip4_iter *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError("Incompatible checksums (%s vs 0xd0a7020 = (cur, max))" % __pyx_checksum) + * __pyx_result = __addr_ip4_iter.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle___addr_ip4_iter(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dnet.__pyx_unpickle___addr_ip4_iter", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_4dnet___pyx_unpickle___addr_ip4_iter__set_state(struct __pyx_obj_4dnet___addr_ip4_iter *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + unsigned long __pyx_t_1; + int __pyx_t_2; + Py_ssize_t __pyx_t_3; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle___addr_ip4_iter__set_state", 0); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_As_unsigned_long(PyTuple_GET_ITEM(__pyx_v___pyx_state, 0)); if (unlikely((__pyx_t_1 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->cur = __pyx_t_1; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_As_unsigned_long(PyTuple_GET_ITEM(__pyx_v___pyx_state, 1)); if (unlikely((__pyx_t_1 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->max = __pyx_t_1; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = ((__pyx_t_3 > 2) != 0); + if (__pyx_t_4) { + } else { + __pyx_t_2 = __pyx_t_4; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_4 != 0); + __pyx_t_2 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "(tree fragment)":14 + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[2]) # <<<<<<<<<<<<<< + */ + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_7 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + } + } + __pyx_t_6 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_7, PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)) : __Pyx_PyObject_CallOneArg(__pyx_t_8, PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[2]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle___addr_ip4_iter__set_state(<__addr_ip4_iter> __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle___addr_ip4_iter__set_state(__addr_ip4_iter __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result.cur = __pyx_state[0]; __pyx_result.max = __pyx_state[1] + * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dnet.__pyx_unpickle___addr_ip4_iter__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_tp_new_4dnet_eth(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_4dnet_eth(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_3eth_9__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_4dnet_eth[] = { + {"get", (PyCFunction)__pyx_pw_4dnet_3eth_3get, METH_NOARGS, __pyx_doc_4dnet_3eth_2get}, + {"set", (PyCFunction)__pyx_pw_4dnet_3eth_5set, METH_O, __pyx_doc_4dnet_3eth_4set}, + {"send", (PyCFunction)__pyx_pw_4dnet_3eth_7send, METH_O, __pyx_doc_4dnet_3eth_6send}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_3eth_11__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_3eth_13__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} }; -PyTypeObject __pyx_type_4dnet_arp = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.arp", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_arp), /*tp_basicsize*/ +static PyTypeObject __pyx_type_4dnet_eth = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.eth", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_eth), /*tp_basicsize*/ 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_arp, /*tp_dealloc*/ + __pyx_tp_dealloc_4dnet_eth, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_arp, /*tp_as_number*/ - &__pyx_tp_as_sequence_arp, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_arp, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_arp, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "arp() -> ARP table object\n\n Open a handle to the system ARP table.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_arp, /*tp_traverse*/ - __pyx_tp_clear_4dnet_arp, /*tp_clear*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "eth(device) -> Ethernet device object\n\n Open the specified Ethernet device for sending.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_3arp___iter__, /*tp_iter*/ + 0, /*tp_iter*/ 0, /*tp_iternext*/ - __pyx_methods_4dnet_arp, /*tp_methods*/ + __pyx_methods_4dnet_eth, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ @@ -7215,9 +19011,9 @@ PyTypeObject __pyx_type_4dnet_arp = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_3arp___init__, /*tp_init*/ + __pyx_pw_4dnet_3eth_1__init__, /*tp_init*/ 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_arp, /*tp_new*/ + __pyx_tp_new_4dnet_eth, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ @@ -7225,144 +19021,96 @@ PyTypeObject __pyx_type_4dnet_arp = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet_intf(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o; +static PyObject *__pyx_tp_new_4dnet_ip(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } -static void __pyx_tp_dealloc_4dnet_intf(PyObject *o) { - struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o; +static void __pyx_tp_dealloc_4dnet_ip(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_4intf___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_2ip_5__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } - (*o->ob_type->tp_free)(o); -} - -static int __pyx_tp_traverse_4dnet_intf(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o; - return 0; -} - -static int __pyx_tp_clear_4dnet_intf(PyObject *o) { - struct __pyx_obj_4dnet_intf *p = (struct __pyx_obj_4dnet_intf *)o; - return 0; + (*Py_TYPE(o)->tp_free)(o); } -static struct PyMethodDef __pyx_methods_4dnet_intf[] = { - {"get", (PyCFunction)__pyx_f_4dnet_4intf_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_get}, - {"get_src", (PyCFunction)__pyx_f_4dnet_4intf_get_src, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_get_src}, - {"get_dst", (PyCFunction)__pyx_f_4dnet_4intf_get_dst, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_get_dst}, - {"set", (PyCFunction)__pyx_f_4dnet_4intf_set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_set}, - {"loop", (PyCFunction)__pyx_f_4dnet_4intf_loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_loop}, +static PyMethodDef __pyx_methods_4dnet_ip[] = { + {"send", (PyCFunction)__pyx_pw_4dnet_2ip_3send, METH_O, __pyx_doc_4dnet_2ip_2send}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_2ip_7__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_2ip_9__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number_intf = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - -static PySequenceMethods __pyx_tp_as_sequence_intf = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_intf = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_intf = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; - -PyTypeObject __pyx_type_4dnet_intf = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.intf", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_intf), /*tp_basicsize*/ +static PyTypeObject __pyx_type_4dnet_ip = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.ip", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_ip), /*tp_basicsize*/ 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_intf, /*tp_dealloc*/ + __pyx_tp_dealloc_4dnet_ip, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_intf, /*tp_as_number*/ - &__pyx_tp_as_sequence_intf, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_intf, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_intf, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "intf() -> Interface table object\n\n Open a handle to the system network interface table.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_intf, /*tp_traverse*/ - __pyx_tp_clear_4dnet_intf, /*tp_clear*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "ip() -> Raw IP object\n\n Open a raw IP socket for sending.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_4intf___iter__, /*tp_iter*/ + 0, /*tp_iter*/ 0, /*tp_iternext*/ - __pyx_methods_4dnet_intf, /*tp_methods*/ + __pyx_methods_4dnet_ip, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ @@ -7370,9 +19118,9 @@ PyTypeObject __pyx_type_4dnet_intf = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_4intf___init__, /*tp_init*/ + __pyx_pw_4dnet_2ip_1__init__, /*tp_init*/ 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_intf, /*tp_new*/ + __pyx_tp_new_4dnet_ip, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ @@ -7380,52 +19128,168 @@ PyTypeObject __pyx_type_4dnet_intf = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet_route(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o; +static PyObject *__pyx_tp_new_4dnet_addr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } -static void __pyx_tp_dealloc_4dnet_route(PyObject *o) { - struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o; - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_5route___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; - PyErr_Restore(etype, eval, etb); +static void __pyx_tp_dealloc_4dnet_addr(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; } - (*o->ob_type->tp_free)(o); + #endif + (*Py_TYPE(o)->tp_free)(o); } -static int __pyx_tp_traverse_4dnet_route(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o; - return 0; +static PyObject *__pyx_tp_richcompare_4dnet_addr(PyObject *o1, PyObject *o2, int op) { + switch (op) { + case Py_EQ: { + return __pyx_pw_4dnet_4addr_11__eq__(o1, o2); + } + case Py_NE: { + return __pyx_pw_4dnet_4addr_13__ne__(o1, o2); + } + case Py_LT: { + return __pyx_pw_4dnet_4addr_15__lt__(o1, o2); + } + case Py_GT: { + return __pyx_pw_4dnet_4addr_17__gt__(o1, o2); + } + case Py_LE: { + return __pyx_pw_4dnet_4addr_19__le__(o1, o2); + } + case Py_GE: { + return __pyx_pw_4dnet_4addr_21__ge__(o1, o2); + } + default: { + return __Pyx_NewRef(Py_NotImplemented); + } + } } -static int __pyx_tp_clear_4dnet_route(PyObject *o) { - struct __pyx_obj_4dnet_route *p = (struct __pyx_obj_4dnet_route *)o; - return 0; +static PyObject *__pyx_getprop_4dnet_4addr_addrtype(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_8addrtype_1__get__(o); +} + +static int __pyx_setprop_4dnet_4addr_addrtype(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_4dnet_4addr_8addrtype_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } +} + +static PyObject *__pyx_getprop_4dnet_4addr_bits(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_4bits_1__get__(o); +} + +static int __pyx_setprop_4dnet_4addr_bits(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_4dnet_4addr_4bits_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } +} + +static PyObject *__pyx_getprop_4dnet_4addr_data(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_4data_1__get__(o); +} + +static PyObject *__pyx_getprop_4dnet_4addr_eth(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_3eth_1__get__(o); +} + +static int __pyx_setprop_4dnet_4addr_eth(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_4dnet_4addr_3eth_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } +} + +static PyObject *__pyx_getprop_4dnet_4addr_ip(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_2ip_1__get__(o); +} + +static int __pyx_setprop_4dnet_4addr_ip(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_4dnet_4addr_2ip_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } +} + +static PyObject *__pyx_getprop_4dnet_4addr_ip6(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_4addr_3ip6_1__get__(o); +} + +static int __pyx_setprop_4dnet_4addr_ip6(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) { + if (v) { + return __pyx_pw_4dnet_4addr_3ip6_3__set__(o, v); + } + else { + PyErr_SetString(PyExc_NotImplementedError, "__del__"); + return -1; + } } -static struct PyMethodDef __pyx_methods_4dnet_route[] = { - {"add", (PyCFunction)__pyx_f_4dnet_5route_add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_add}, - {"delete", (PyCFunction)__pyx_f_4dnet_5route_delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_delete}, - {"get", (PyCFunction)__pyx_f_4dnet_5route_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_get}, - {"loop", (PyCFunction)__pyx_f_4dnet_5route_loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_loop}, +static PyMethodDef __pyx_methods_4dnet_addr[] = { + {"bcast", (PyCFunction)__pyx_pw_4dnet_4addr_3bcast, METH_NOARGS, __pyx_doc_4dnet_4addr_2bcast}, + {"net", (PyCFunction)__pyx_pw_4dnet_4addr_5net, METH_NOARGS, __pyx_doc_4dnet_4addr_4net}, + {"__copy__", (PyCFunction)__pyx_pw_4dnet_4addr_9__copy__, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_4addr_35__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_4addr_37__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number_route = { - 0, /*nb_add*/ +static struct PyGetSetDef __pyx_getsets_4dnet_addr[] = { + {(char *)"addrtype", __pyx_getprop_4dnet_4addr_addrtype, __pyx_setprop_4dnet_4addr_addrtype, (char *)"Address type (ADDR_TYPE_*) integer.", 0}, + {(char *)"bits", __pyx_getprop_4dnet_4addr_bits, __pyx_setprop_4dnet_4addr_bits, (char *)"Address bitlength integer.", 0}, + {(char *)"data", __pyx_getprop_4dnet_4addr_data, 0, (char *)"Raw address string.", 0}, + {(char *)"eth", __pyx_getprop_4dnet_4addr_eth, __pyx_setprop_4dnet_4addr_eth, (char *)"Ethernet MAC address as binary string.", 0}, + {(char *)"ip", __pyx_getprop_4dnet_4addr_ip, __pyx_setprop_4dnet_4addr_ip, (char *)"IPv4 address as binary string.", 0}, + {(char *)"ip6", __pyx_getprop_4dnet_4addr_ip6, __pyx_setprop_4dnet_4addr_ip6, (char *)"IPv6 address as binary string.", 0}, + {0, 0, 0, 0, 0} +}; + +static PyNumberMethods __pyx_tp_as_number_addr = { + __pyx_pw_4dnet_4addr_7__add__, /*nb_add*/ 0, /*nb_subtract*/ 0, /*nb_multiply*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) 0, /*nb_divide*/ + #endif 0, /*nb_remainder*/ 0, /*nb_divmod*/ 0, /*nb_power*/ @@ -7439,16 +19303,28 @@ static PyNumberMethods __pyx_tp_as_number_route = { 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ + #endif + __pyx_pw_4dnet_4addr_27__int__, /*nb_int*/ + #if PY_MAJOR_VERSION < 3 + __pyx_pw_4dnet_4addr_29__long__, /*nb_long*/ + #else + 0, /*reserved*/ + #endif 0, /*nb_float*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) 0, /*nb_oct*/ + #endif + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) 0, /*nb_hex*/ + #endif 0, /*nb_inplace_add*/ 0, /*nb_inplace_subtract*/ 0, /*nb_inplace_multiply*/ + #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) 0, /*nb_inplace_divide*/ + #endif 0, /*nb_inplace_remainder*/ 0, /*nb_inplace_power*/ 0, /*nb_inplace_lshift*/ @@ -7460,9 +19336,16 @@ static PyNumberMethods __pyx_tp_as_number_route = { 0, /*nb_true_divide*/ 0, /*nb_inplace_floor_divide*/ 0, /*nb_inplace_true_divide*/ + 0, /*nb_index*/ + #if PY_VERSION_HEX >= 0x03050000 + 0, /*nb_matrix_multiply*/ + #endif + #if PY_VERSION_HEX >= 0x03050000 + 0, /*nb_inplace_matrix_multiply*/ + #endif }; -static PySequenceMethods __pyx_tp_as_sequence_route = { +static PySequenceMethods __pyx_tp_as_sequence_addr = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ @@ -7470,53 +19353,151 @@ static PySequenceMethods __pyx_tp_as_sequence_route = { 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ + __pyx_pw_4dnet_4addr_23__contains__, /*sq_contains*/ 0, /*sq_inplace_concat*/ 0, /*sq_inplace_repeat*/ }; -static PyMappingMethods __pyx_tp_as_mapping_route = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ +static PyTypeObject __pyx_type_4dnet_addr = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.addr", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_addr), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_4dnet_addr, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + __pyx_pw_4dnet_4addr_33__repr__, /*tp_repr*/ + &__pyx_tp_as_number_addr, /*tp_as_number*/ + &__pyx_tp_as_sequence_addr, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + __pyx_pw_4dnet_4addr_25__hash__, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "addr(addrtxt=None, addrtype=ADDR_TYPE_NONE) -> network address object\n\n Create a network address object, optionally initialized from a\n human-readable Ethernet, IP, or IPv6 address string.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + __pyx_tp_richcompare_4dnet_addr, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + __pyx_pw_4dnet_4addr_31__iter__, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_4dnet_addr, /*tp_methods*/ + 0, /*tp_members*/ + __pyx_getsets_4dnet_addr, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_4dnet_4addr_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_4dnet_addr, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyBufferProcs __pyx_tp_as_buffer_route = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ +static PyObject *__pyx_tp_new_4dnet___addr_ip4_iter(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_4dnet___addr_ip4_iter(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + (*Py_TYPE(o)->tp_free)(o); +} + +static PyObject *__pyx_specialmethod___pyx_pw_4dnet_15__addr_ip4_iter_3__next__(PyObject *self, CYTHON_UNUSED PyObject *arg) {return __pyx_pw_4dnet_15__addr_ip4_iter_3__next__(self);} + +static PyMethodDef __pyx_methods_4dnet___addr_ip4_iter[] = { + {"__next__", (PyCFunction)__pyx_specialmethod___pyx_pw_4dnet_15__addr_ip4_iter_3__next__, METH_NOARGS|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_15__addr_ip4_iter_5__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_15__addr_ip4_iter_7__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} }; -PyTypeObject __pyx_type_4dnet_route = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.route", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_route), /*tp_basicsize*/ +static PyTypeObject __pyx_type_4dnet___addr_ip4_iter = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.__addr_ip4_iter", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet___addr_ip4_iter), /*tp_basicsize*/ 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_route, /*tp_dealloc*/ + __pyx_tp_dealloc_4dnet___addr_ip4_iter, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_route, /*tp_as_number*/ - &__pyx_tp_as_sequence_route, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_route, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_route, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "route() -> Routing table object\n\n Open a handle to the system routing table.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_route, /*tp_traverse*/ - __pyx_tp_clear_4dnet_route, /*tp_clear*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_5route___iter__, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_4dnet_route, /*tp_methods*/ + 0, /*tp_iter*/ + __pyx_pw_4dnet_15__addr_ip4_iter_3__next__, /*tp_iternext*/ + __pyx_methods_4dnet___addr_ip4_iter, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ @@ -7524,9 +19505,9 @@ PyTypeObject __pyx_type_4dnet_route = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_5route___init__, /*tp_init*/ + __pyx_pw_4dnet_15__addr_ip4_iter_1__init__, /*tp_init*/ 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_route, /*tp_new*/ + __pyx_tp_new_4dnet___addr_ip4_iter, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ @@ -7534,142 +19515,99 @@ PyTypeObject __pyx_type_4dnet_route = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet_fw(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o; +static PyObject *__pyx_tp_new_4dnet_arp(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } -static void __pyx_tp_dealloc_4dnet_fw(PyObject *o) { - struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o; +static void __pyx_tp_dealloc_4dnet_arp(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_2fw___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_3arp_13__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } - (*o->ob_type->tp_free)(o); -} - -static int __pyx_tp_traverse_4dnet_fw(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o; - return 0; + (*Py_TYPE(o)->tp_free)(o); } -static int __pyx_tp_clear_4dnet_fw(PyObject *o) { - struct __pyx_obj_4dnet_fw *p = (struct __pyx_obj_4dnet_fw *)o; - return 0; -} - -static struct PyMethodDef __pyx_methods_4dnet_fw[] = { - {"add", (PyCFunction)__pyx_f_4dnet_2fw_add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_2fw_add}, - {"delete", (PyCFunction)__pyx_f_4dnet_2fw_delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_2fw_delete}, - {"loop", (PyCFunction)__pyx_f_4dnet_2fw_loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_2fw_loop}, +static PyMethodDef __pyx_methods_4dnet_arp[] = { + {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_3arp_3add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_2add}, + {"delete", (PyCFunction)__pyx_pw_4dnet_3arp_5delete, METH_O, __pyx_doc_4dnet_3arp_4delete}, + {"get", (PyCFunction)__pyx_pw_4dnet_3arp_7get, METH_O, __pyx_doc_4dnet_3arp_6get}, + {"loop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_3arp_9loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3arp_8loop}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_3arp_15__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_3arp_17__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number_fw = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - -static PySequenceMethods __pyx_tp_as_sequence_fw = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_fw = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_fw = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; - -PyTypeObject __pyx_type_4dnet_fw = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ - "dnet.fw", /*tp_name*/ - sizeof(struct __pyx_obj_4dnet_fw), /*tp_basicsize*/ +static PyTypeObject __pyx_type_4dnet_arp = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.arp", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_arp), /*tp_basicsize*/ 0, /*tp_itemsize*/ - __pyx_tp_dealloc_4dnet_fw, /*tp_dealloc*/ + __pyx_tp_dealloc_4dnet_arp, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_fw, /*tp_as_number*/ - &__pyx_tp_as_sequence_fw, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_fw, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_fw, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "fw() -> Firewall ruleset object\n \n Open a handle to the local network firewall configuration.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_fw, /*tp_traverse*/ - __pyx_tp_clear_4dnet_fw, /*tp_clear*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "arp() -> ARP table object\n\n Open a handle to the system ARP table.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_2fw___iter__, /*tp_iter*/ + __pyx_pw_4dnet_3arp_11__iter__, /*tp_iter*/ 0, /*tp_iternext*/ - __pyx_methods_4dnet_fw, /*tp_methods*/ + __pyx_methods_4dnet_arp, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ 0, /*tp_base*/ @@ -7677,9 +19615,9 @@ PyTypeObject __pyx_type_4dnet_fw = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_2fw___init__, /*tp_init*/ + __pyx_pw_4dnet_3arp_1__init__, /*tp_init*/ 0, /*tp_alloc*/ - __pyx_tp_new_4dnet_fw, /*tp_new*/ + __pyx_tp_new_4dnet_arp, /*tp_new*/ 0, /*tp_free*/ 0, /*tp_is_gc*/ 0, /*tp_bases*/ @@ -7687,141 +19625,427 @@ PyTypeObject __pyx_type_4dnet_fw = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet_rand(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o; +static PyObject *__pyx_tp_new_4dnet_intf(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } -static void __pyx_tp_dealloc_4dnet_rand(PyObject *o) { - struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o; +static void __pyx_tp_dealloc_4dnet_intf(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_4rand___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_4intf_15__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } - (*o->ob_type->tp_free)(o); + (*Py_TYPE(o)->tp_free)(o); } -static int __pyx_tp_traverse_4dnet_rand(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o; - return 0; -} +static PyMethodDef __pyx_methods_4dnet_intf[] = { + {"get", (PyCFunction)__pyx_pw_4dnet_4intf_3get, METH_O, __pyx_doc_4dnet_4intf_2get}, + {"get_src", (PyCFunction)__pyx_pw_4dnet_4intf_5get_src, METH_O, __pyx_doc_4dnet_4intf_4get_src}, + {"get_dst", (PyCFunction)__pyx_pw_4dnet_4intf_7get_dst, METH_O, __pyx_doc_4dnet_4intf_6get_dst}, + {"set", (PyCFunction)__pyx_pw_4dnet_4intf_9set, METH_O, __pyx_doc_4dnet_4intf_8set}, + {"loop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_4intf_11loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4intf_10loop}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_4intf_17__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_4intf_19__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} +}; -static int __pyx_tp_clear_4dnet_rand(PyObject *o) { - struct __pyx_obj_4dnet_rand *p = (struct __pyx_obj_4dnet_rand *)o; - return 0; +static PyTypeObject __pyx_type_4dnet_intf = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.intf", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_intf), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_4dnet_intf, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "intf() -> Interface table object\n\n Open a handle to the system network interface table.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + __pyx_pw_4dnet_4intf_13__iter__, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_4dnet_intf, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_4dnet_4intf_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_4dnet_intf, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif +}; + +static PyObject *__pyx_tp_new_4dnet_route(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_4dnet_route(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_5route_13__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + (*Py_TYPE(o)->tp_free)(o); } -static struct PyMethodDef __pyx_methods_4dnet_rand[] = { - {"get", (PyCFunction)__pyx_f_4dnet_4rand_get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_get}, - {"set", (PyCFunction)__pyx_f_4dnet_4rand_set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_set}, - {"add", (PyCFunction)__pyx_f_4dnet_4rand_add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_add}, - {"uint8", (PyCFunction)__pyx_f_4dnet_4rand_uint8, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_uint8}, - {"uint16", (PyCFunction)__pyx_f_4dnet_4rand_uint16, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_uint16}, - {"uint32", (PyCFunction)__pyx_f_4dnet_4rand_uint32, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_uint32}, - {"xrange", (PyCFunction)__pyx_f_4dnet_4rand_xrange, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_xrange}, +static PyMethodDef __pyx_methods_4dnet_route[] = { + {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_5route_3add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_2add}, + {"delete", (PyCFunction)__pyx_pw_4dnet_5route_5delete, METH_O, __pyx_doc_4dnet_5route_4delete}, + {"get", (PyCFunction)__pyx_pw_4dnet_5route_7get, METH_O, __pyx_doc_4dnet_5route_6get}, + {"loop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_5route_9loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_5route_8loop}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_5route_15__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_5route_17__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number_rand = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ +static PyTypeObject __pyx_type_4dnet_route = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.route", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_route), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_4dnet_route, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "route() -> Routing table object\n\n Open a handle to the system routing table.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + __pyx_pw_4dnet_5route_11__iter__, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_4dnet_route, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_4dnet_5route_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_4dnet_route, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PySequenceMethods __pyx_tp_as_sequence_rand = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ +static PyObject *__pyx_tp_new_4dnet_fw(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_4dnet_fw(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_2fw_11__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_4dnet_fw[] = { + {"add", (PyCFunction)__pyx_pw_4dnet_2fw_3add, METH_O, __pyx_doc_4dnet_2fw_2add}, + {"delete", (PyCFunction)__pyx_pw_4dnet_2fw_5delete, METH_O, __pyx_doc_4dnet_2fw_4delete}, + {"loop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_2fw_7loop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_2fw_6loop}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_2fw_13__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_2fw_15__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} }; -static PyMappingMethods __pyx_tp_as_mapping_rand = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ +static PyTypeObject __pyx_type_4dnet_fw = { + PyVarObject_HEAD_INIT(0, 0) + "dnet.fw", /*tp_name*/ + sizeof(struct __pyx_obj_4dnet_fw), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_4dnet_fw, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "fw() -> Firewall ruleset object\n \n Open a handle to the local network firewall configuration.\n ", /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + __pyx_pw_4dnet_2fw_9__iter__, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_4dnet_fw, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + __pyx_pw_4dnet_2fw_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_4dnet_fw, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyBufferProcs __pyx_tp_as_buffer_rand = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ +static PyObject *__pyx_tp_new_4dnet_rand(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + return o; +} + +static void __pyx_tp_dealloc_4dnet_rand(PyObject *o) { + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + { + PyObject *etype, *eval, *etb; + PyErr_Fetch(&etype, &eval, &etb); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_4rand_17__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); + PyErr_Restore(etype, eval, etb); + } + (*Py_TYPE(o)->tp_free)(o); +} + +static PyMethodDef __pyx_methods_4dnet_rand[] = { + {"get", (PyCFunction)__pyx_pw_4dnet_4rand_3get, METH_O, __pyx_doc_4dnet_4rand_2get}, + {"set", (PyCFunction)__pyx_pw_4dnet_4rand_5set, METH_O, __pyx_doc_4dnet_4rand_4set}, + {"add", (PyCFunction)__pyx_pw_4dnet_4rand_7add, METH_O, __pyx_doc_4dnet_4rand_6add}, + {"uint8", (PyCFunction)__pyx_pw_4dnet_4rand_9uint8, METH_NOARGS, __pyx_doc_4dnet_4rand_8uint8}, + {"uint16", (PyCFunction)__pyx_pw_4dnet_4rand_11uint16, METH_NOARGS, __pyx_doc_4dnet_4rand_10uint16}, + {"uint32", (PyCFunction)__pyx_pw_4dnet_4rand_13uint32, METH_NOARGS, __pyx_doc_4dnet_4rand_12uint32}, + {"xrange", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4dnet_4rand_15xrange, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_4rand_14xrange}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_4rand_19__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_4rand_21__setstate_cython__, METH_O, 0}, + {0, 0, 0, 0} }; -PyTypeObject __pyx_type_4dnet_rand = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ +static PyTypeObject __pyx_type_4dnet_rand = { + PyVarObject_HEAD_INIT(0, 0) "dnet.rand", /*tp_name*/ sizeof(struct __pyx_obj_4dnet_rand), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_4dnet_rand, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_rand, /*tp_as_number*/ - &__pyx_tp_as_sequence_rand, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_rand, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_rand, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ "rand() -> Pseudo-random number generator\n\n Obtain a handle for fast, cryptographically strong pseudo-random\n number generation. The starting seed is derived from the system\n random data source device (if one exists), or from the current time\n and random stack contents.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_rand, /*tp_traverse*/ - __pyx_tp_clear_4dnet_rand, /*tp_clear*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ @@ -7834,7 +20058,7 @@ PyTypeObject __pyx_type_4dnet_rand = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_4rand___init__, /*tp_init*/ + __pyx_pw_4dnet_4rand_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_4dnet_rand, /*tp_new*/ 0, /*tp_free*/ @@ -7844,77 +20068,53 @@ PyTypeObject __pyx_type_4dnet_rand = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet___rand_xrange(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o; +static PyObject *__pyx_tp_new_4dnet___rand_xrange(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } static void __pyx_tp_dealloc_4dnet___rand_xrange(PyObject *o) { - struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o; - (*o->ob_type->tp_free)(o); -} - -static int __pyx_tp_traverse_4dnet___rand_xrange(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o; - return 0; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif + (*Py_TYPE(o)->tp_free)(o); } -static int __pyx_tp_clear_4dnet___rand_xrange(PyObject *o) { - struct __pyx_obj_4dnet___rand_xrange *p = (struct __pyx_obj_4dnet___rand_xrange *)o; - return 0; -} +static PyObject *__pyx_specialmethod___pyx_pw_4dnet_13__rand_xrange_7__next__(PyObject *self, CYTHON_UNUSED PyObject *arg) {return __pyx_pw_4dnet_13__rand_xrange_7__next__(self);} -static struct PyMethodDef __pyx_methods_4dnet___rand_xrange[] = { +static PyMethodDef __pyx_methods_4dnet___rand_xrange[] = { + {"__next__", (PyCFunction)__pyx_specialmethod___pyx_pw_4dnet_13__rand_xrange_7__next__, METH_NOARGS|METH_COEXIST, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_13__rand_xrange_9__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_13__rand_xrange_11__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number___rand_xrange = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - static PySequenceMethods __pyx_tp_as_sequence___rand_xrange = { - __pyx_f_4dnet_13__rand_xrange___len__, /*sq_length*/ + __pyx_pw_4dnet_13__rand_xrange_5__len__, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ @@ -7927,30 +20127,33 @@ static PySequenceMethods __pyx_tp_as_sequence___rand_xrange = { }; static PyMappingMethods __pyx_tp_as_mapping___rand_xrange = { - __pyx_f_4dnet_13__rand_xrange___len__, /*mp_length*/ + __pyx_pw_4dnet_13__rand_xrange_5__len__, /*mp_length*/ 0, /*mp_subscript*/ 0, /*mp_ass_subscript*/ }; -static PyBufferProcs __pyx_tp_as_buffer___rand_xrange = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; - -PyTypeObject __pyx_type_4dnet___rand_xrange = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ +static PyTypeObject __pyx_type_4dnet___rand_xrange = { + PyVarObject_HEAD_INIT(0, 0) "dnet.__rand_xrange", /*tp_name*/ sizeof(struct __pyx_obj_4dnet___rand_xrange), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_4dnet___rand_xrange, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number___rand_xrange, /*tp_as_number*/ + 0, /*tp_as_number*/ &__pyx_tp_as_sequence___rand_xrange, /*tp_as_sequence*/ &__pyx_tp_as_mapping___rand_xrange, /*tp_as_mapping*/ 0, /*tp_hash*/ @@ -7958,15 +20161,15 @@ PyTypeObject __pyx_type_4dnet___rand_xrange = { 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer___rand_xrange, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ 0, /*tp_doc*/ - __pyx_tp_traverse_4dnet___rand_xrange, /*tp_traverse*/ - __pyx_tp_clear_4dnet___rand_xrange, /*tp_clear*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ - __pyx_f_4dnet_13__rand_xrange___iter__, /*tp_iter*/ - __pyx_f_4dnet_13__rand_xrange___next__, /*tp_iternext*/ + __pyx_pw_4dnet_13__rand_xrange_3__iter__, /*tp_iter*/ + __pyx_pw_4dnet_13__rand_xrange_7__next__, /*tp_iternext*/ __pyx_methods_4dnet___rand_xrange, /*tp_methods*/ 0, /*tp_members*/ 0, /*tp_getset*/ @@ -7975,7 +20178,7 @@ PyTypeObject __pyx_type_4dnet___rand_xrange = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_13__rand_xrange___init__, /*tp_init*/ + __pyx_pw_4dnet_13__rand_xrange_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_4dnet___rand_xrange, /*tp_new*/ 0, /*tp_free*/ @@ -7985,152 +20188,108 @@ PyTypeObject __pyx_type_4dnet___rand_xrange = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static PyObject *__pyx_tp_new_4dnet_tun(PyTypeObject *t, PyObject *a, PyObject *k) { - PyObject *o = (*t->tp_alloc)(t, 0); - struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o; +static PyObject *__pyx_tp_new_4dnet_tun(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + PyObject *o; + if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; return o; } static void __pyx_tp_dealloc_4dnet_tun(PyObject *o) { - struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + #endif { PyObject *etype, *eval, *etb; PyErr_Fetch(&etype, &eval, &etb); - ++o->ob_refcnt; - __pyx_f_4dnet_3tun___dealloc__(o); - if (PyErr_Occurred()) PyErr_WriteUnraisable(o); - --o->ob_refcnt; + __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); + __pyx_pw_4dnet_3tun_11__dealloc__(o); + __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); PyErr_Restore(etype, eval, etb); } - (*o->ob_type->tp_free)(o); -} - -static int __pyx_tp_traverse_4dnet_tun(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o; - return 0; -} - -static int __pyx_tp_clear_4dnet_tun(PyObject *o) { - struct __pyx_obj_4dnet_tun *p = (struct __pyx_obj_4dnet_tun *)o; - return 0; + (*Py_TYPE(o)->tp_free)(o); } -static PyObject *__pyx_getprop_4dnet_3tun_name(PyObject *o, void *x) { - return __pyx_f_4dnet_3tun_4name___get__(o); +static PyObject *__pyx_getprop_4dnet_3tun_name(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_3tun_4name_1__get__(o); } -static PyObject *__pyx_getprop_4dnet_3tun_fd(PyObject *o, void *x) { - return __pyx_f_4dnet_3tun_2fd___get__(o); +static PyObject *__pyx_getprop_4dnet_3tun_fd(PyObject *o, CYTHON_UNUSED void *x) { + return __pyx_pw_4dnet_3tun_2fd_1__get__(o); } -static struct PyMethodDef __pyx_methods_4dnet_tun[] = { - {"fileno", (PyCFunction)__pyx_f_4dnet_3tun_fileno, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3tun_fileno}, - {"send", (PyCFunction)__pyx_f_4dnet_3tun_send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3tun_send}, - {"recv", (PyCFunction)__pyx_f_4dnet_3tun_recv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_3tun_recv}, - {"close", (PyCFunction)__pyx_f_4dnet_3tun_close, METH_VARARGS|METH_KEYWORDS, 0}, +static PyMethodDef __pyx_methods_4dnet_tun[] = { + {"fileno", (PyCFunction)__pyx_pw_4dnet_3tun_3fileno, METH_NOARGS, __pyx_doc_4dnet_3tun_2fileno}, + {"send", (PyCFunction)__pyx_pw_4dnet_3tun_5send, METH_O, __pyx_doc_4dnet_3tun_4send}, + {"recv", (PyCFunction)__pyx_pw_4dnet_3tun_7recv, METH_NOARGS, __pyx_doc_4dnet_3tun_6recv}, + {"close", (PyCFunction)__pyx_pw_4dnet_3tun_9close, METH_NOARGS, 0}, + {"__reduce_cython__", (PyCFunction)__pyx_pw_4dnet_3tun_13__reduce_cython__, METH_NOARGS, 0}, + {"__setstate_cython__", (PyCFunction)__pyx_pw_4dnet_3tun_15__setstate_cython__, METH_O, 0}, {0, 0, 0, 0} }; static struct PyGetSetDef __pyx_getsets_4dnet_tun[] = { - {"name", __pyx_getprop_4dnet_3tun_name, 0, __pyx_k7, 0}, - {"fd", __pyx_getprop_4dnet_3tun_fd, 0, __pyx_k8, 0}, + {(char *)"name", __pyx_getprop_4dnet_3tun_name, 0, (char *)"Tunnel interface name.", 0}, + {(char *)"fd", __pyx_getprop_4dnet_3tun_fd, 0, (char *)"File descriptor for tunnel handle.", 0}, {0, 0, 0, 0, 0} }; -static PyNumberMethods __pyx_tp_as_number_tun = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - 0, /*nb_divide*/ - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - 0, /*nb_coerce*/ - 0, /*nb_int*/ - 0, /*nb_long*/ - 0, /*nb_float*/ - 0, /*nb_oct*/ - 0, /*nb_hex*/ - 0, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - 0, /*nb_inplace_divide*/ - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ -}; - -static PySequenceMethods __pyx_tp_as_sequence_tun = { - 0, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - 0, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - 0, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_tun = { - 0, /*mp_length*/ - 0, /*mp_subscript*/ - 0, /*mp_ass_subscript*/ -}; - -static PyBufferProcs __pyx_tp_as_buffer_tun = { - 0, /*bf_getreadbuffer*/ - 0, /*bf_getwritebuffer*/ - 0, /*bf_getsegcount*/ - 0, /*bf_getcharbuffer*/ -}; - -PyTypeObject __pyx_type_4dnet_tun = { - PyVarObject_HEAD_INIT(0, 0) /*ob_size*/ +static PyTypeObject __pyx_type_4dnet_tun = { + PyVarObject_HEAD_INIT(0, 0) "dnet.tun", /*tp_name*/ sizeof(struct __pyx_obj_4dnet_tun), /*tp_basicsize*/ 0, /*tp_itemsize*/ __pyx_tp_dealloc_4dnet_tun, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif 0, /*tp_getattr*/ 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif 0, /*tp_repr*/ - &__pyx_tp_as_number_tun, /*tp_as_number*/ - &__pyx_tp_as_sequence_tun, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_tun, /*tp_as_mapping*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ - &__pyx_tp_as_buffer_tun, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/ "tun(src, dst[, mtu]) -> Network tunnel interface handle\n \n Obtain a handle to a network tunnel interface, to which packets\n destined for dst are delivered (with source addresses rewritten to\n src), where they may be read by a userland process and processed\n as desired. Packets written back to the handle are injected into\n the kernel networking subsystem.\n ", /*tp_doc*/ - __pyx_tp_traverse_4dnet_tun, /*tp_traverse*/ - __pyx_tp_clear_4dnet_tun, /*tp_clear*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ 0, /*tp_richcompare*/ 0, /*tp_weaklistoffset*/ 0, /*tp_iter*/ @@ -8143,7 +20302,7 @@ PyTypeObject __pyx_type_4dnet_tun = { 0, /*tp_descr_get*/ 0, /*tp_descr_set*/ 0, /*tp_dictoffset*/ - __pyx_f_4dnet_3tun___init__, /*tp_init*/ + __pyx_pw_4dnet_3tun_1__init__, /*tp_init*/ 0, /*tp_alloc*/ __pyx_tp_new_4dnet_tun, /*tp_new*/ 0, /*tp_free*/ @@ -8153,1210 +20312,6483 @@ PyTypeObject __pyx_type_4dnet_tun = { 0, /*tp_cache*/ 0, /*tp_subclasses*/ 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + 0, /*tp_finalize*/ + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, /*tp_print*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 + 0, /*tp_pypy_flags*/ + #endif }; -static struct PyMethodDef __pyx_methods[] = { - {"__iter_append", (PyCFunction)__pyx_f_4dnet___iter_append, METH_VARARGS|METH_KEYWORDS, 0}, - {"eth_ntoa", (PyCFunction)__pyx_f_4dnet_eth_ntoa, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_eth_ntoa}, - {"eth_aton", (PyCFunction)__pyx_f_4dnet_eth_aton, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_eth_aton}, - {"eth_pack_hdr", (PyCFunction)__pyx_f_4dnet_eth_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_eth_pack_hdr}, - {"ip_ntoa", (PyCFunction)__pyx_f_4dnet_ip_ntoa, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip_ntoa}, - {"ip_aton", (PyCFunction)__pyx_f_4dnet_ip_aton, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip_aton}, - {"ip_checksum", (PyCFunction)__pyx_f_4dnet_ip_checksum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip_checksum}, - {"ip_cksum_add", (PyCFunction)__pyx_f_4dnet_ip_cksum_add, METH_VARARGS|METH_KEYWORDS, 0}, - {"ip_cksum_carry", (PyCFunction)__pyx_f_4dnet_ip_cksum_carry, METH_VARARGS|METH_KEYWORDS, 0}, - {"ip_pack_hdr", (PyCFunction)__pyx_f_4dnet_ip_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip_pack_hdr}, - {"ip6_ntoa", (PyCFunction)__pyx_f_4dnet_ip6_ntoa, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip6_ntoa}, - {"ip6_aton", (PyCFunction)__pyx_f_4dnet_ip6_aton, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip6_aton}, - {"ip6_checksum", (PyCFunction)__pyx_f_4dnet_ip6_checksum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip6_checksum}, - {"ip6_pack_hdr", (PyCFunction)__pyx_f_4dnet_ip6_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_ip6_pack_hdr}, - {"arp_pack_hdr_ethip", (PyCFunction)__pyx_f_4dnet_arp_pack_hdr_ethip, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_arp_pack_hdr_ethip}, - {"icmp_pack_hdr", (PyCFunction)__pyx_f_4dnet_icmp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_icmp_pack_hdr}, - {"tcp_pack_hdr", (PyCFunction)__pyx_f_4dnet_tcp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_tcp_pack_hdr}, - {"udp_pack_hdr", (PyCFunction)__pyx_f_4dnet_udp_pack_hdr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4dnet_udp_pack_hdr}, +static PyMethodDef __pyx_methods[] = { {0, 0, 0, 0} }; -static void __pyx_init_filenames(void); /*proto*/ -static struct PyModuleDef dnet = { - PyModuleDef_HEAD_INIT, - "dnet", /* m_name */ - __pyx_mdoc, /* m_doc */ - -1, /* m_size */ - __pyx_methods, /* m_methods */ - NULL, /* m_reload */ - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL, /* m_free */ - }; - -PyMODINIT_FUNC PyInit_dnet(void); /*proto*/ -PyMODINIT_FUNC PyInit_dnet(void) { - PyObject *__pyx_1 = 0; - PyObject *__pyx_2 = 0; - PyObject *__pyx_3 = 0; - PyObject *__pyx_4 = 0; - PyObject *__pyx_5 = 0; - PyObject *__pyx_6 = 0; - PyObject *__pyx_7 = 0; - PyObject *__pyx_8 = 0; - PyObject *__pyx_9 = 0; - PyObject *__pyx_10 = 0; - PyObject *__pyx_11 = 0; - PyObject *__pyx_12 = 0; - PyObject *__pyx_13 = 0; - PyObject *__pyx_14 = 0; - PyObject *__pyx_15 = 0; - PyObject *__pyx_16 = 0; - PyObject *__pyx_17 = 0; - PyObject *__pyx_18 = 0; - PyObject *__pyx_19 = 0; - PyObject *__pyx_20 = 0; - PyObject *__pyx_21 = 0; - PyObject *__pyx_22 = 0; - PyObject *__pyx_23 = 0; - PyObject *__pyx_24 = 0; - PyObject *__pyx_25 = 0; - PyObject *__pyx_26 = 0; - PyObject *__pyx_27 = 0; - PyObject *__pyx_28 = 0; - PyObject *__pyx_29 = 0; - PyObject *__pyx_30 = 0; - PyObject *__pyx_31 = 0; - __pyx_init_filenames(); - __pyx_m = PyModule_Create2(&dnet,PYTHON_API_VERSION); - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}; - __pyx_b = PyImport_AddModule("__builtin__"); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}; - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}; - if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}; - if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 6; goto __pyx_L1;}; - if (PyType_Ready(&__pyx_type_4dnet_eth) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "eth", (PyObject *)&__pyx_type_4dnet_eth) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; goto __pyx_L1;} +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_dnet(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_dnet}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "dnet", + __pyx_k_dumb_networking_library_This_mod, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_kp_u_1_16, __pyx_k_1_16, sizeof(__pyx_k_1_16), 0, 1, 0, 0}, + {&__pyx_n_s_ADDR_TYPE_ETH, __pyx_k_ADDR_TYPE_ETH, sizeof(__pyx_k_ADDR_TYPE_ETH), 0, 0, 1, 1}, + {&__pyx_n_s_ADDR_TYPE_IP, __pyx_k_ADDR_TYPE_IP, sizeof(__pyx_k_ADDR_TYPE_IP), 0, 0, 1, 1}, + {&__pyx_n_s_ADDR_TYPE_IP6, __pyx_k_ADDR_TYPE_IP6, sizeof(__pyx_k_ADDR_TYPE_IP6), 0, 0, 1, 1}, + {&__pyx_n_s_ADDR_TYPE_NONE, __pyx_k_ADDR_TYPE_NONE, sizeof(__pyx_k_ADDR_TYPE_NONE), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_ETHIP_LEN, __pyx_k_ARP_ETHIP_LEN, sizeof(__pyx_k_ARP_ETHIP_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_HDR_LEN, __pyx_k_ARP_HDR_LEN, sizeof(__pyx_k_ARP_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_HRD_ETH, __pyx_k_ARP_HRD_ETH, sizeof(__pyx_k_ARP_HRD_ETH), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_HRD_IEEE802, __pyx_k_ARP_HRD_IEEE802, sizeof(__pyx_k_ARP_HRD_IEEE802), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_OP_REPLY, __pyx_k_ARP_OP_REPLY, sizeof(__pyx_k_ARP_OP_REPLY), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_OP_REQUEST, __pyx_k_ARP_OP_REQUEST, sizeof(__pyx_k_ARP_OP_REQUEST), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_OP_REVREPLY, __pyx_k_ARP_OP_REVREPLY, sizeof(__pyx_k_ARP_OP_REVREPLY), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_OP_REVREQUEST, __pyx_k_ARP_OP_REVREQUEST, sizeof(__pyx_k_ARP_OP_REVREQUEST), 0, 0, 1, 1}, + {&__pyx_n_s_ARP_PRO_IP, __pyx_k_ARP_PRO_IP, sizeof(__pyx_k_ARP_PRO_IP), 0, 0, 1, 1}, + {&__pyx_n_u_BSD, __pyx_k_BSD, sizeof(__pyx_k_BSD), 0, 1, 0, 1}, + {&__pyx_kp_u_Copyright_c_2022_Oliver_Falk, __pyx_k_Copyright_c_2022_Oliver_Falk, sizeof(__pyx_k_Copyright_c_2022_Oliver_Falk), 0, 1, 0, 0}, + {&__pyx_n_s_ETH_ADDR_BITS, __pyx_k_ETH_ADDR_BITS, sizeof(__pyx_k_ETH_ADDR_BITS), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_ADDR_BROADCAST, __pyx_k_ETH_ADDR_BROADCAST, sizeof(__pyx_k_ETH_ADDR_BROADCAST), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_ADDR_LEN, __pyx_k_ETH_ADDR_LEN, sizeof(__pyx_k_ETH_ADDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_ADDR_UNSPEC, __pyx_k_ETH_ADDR_UNSPEC, sizeof(__pyx_k_ETH_ADDR_UNSPEC), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_CRC_LEN, __pyx_k_ETH_CRC_LEN, sizeof(__pyx_k_ETH_CRC_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_HDR_LEN, __pyx_k_ETH_HDR_LEN, sizeof(__pyx_k_ETH_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_LEN_MAX, __pyx_k_ETH_LEN_MAX, sizeof(__pyx_k_ETH_LEN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_LEN_MIN, __pyx_k_ETH_LEN_MIN, sizeof(__pyx_k_ETH_LEN_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_MIN, __pyx_k_ETH_MIN, sizeof(__pyx_k_ETH_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_MTU, __pyx_k_ETH_MTU, sizeof(__pyx_k_ETH_MTU), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_8021Q, __pyx_k_ETH_TYPE_8021Q, sizeof(__pyx_k_ETH_TYPE_8021Q), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_ARP, __pyx_k_ETH_TYPE_ARP, sizeof(__pyx_k_ETH_TYPE_ARP), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_IP, __pyx_k_ETH_TYPE_IP, sizeof(__pyx_k_ETH_TYPE_IP), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_IPV6, __pyx_k_ETH_TYPE_IPV6, sizeof(__pyx_k_ETH_TYPE_IPV6), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_LEN, __pyx_k_ETH_TYPE_LEN, sizeof(__pyx_k_ETH_TYPE_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_LOOPBACK, __pyx_k_ETH_TYPE_LOOPBACK, sizeof(__pyx_k_ETH_TYPE_LOOPBACK), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_MPLS, __pyx_k_ETH_TYPE_MPLS, sizeof(__pyx_k_ETH_TYPE_MPLS), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_MPLS_MCAST, __pyx_k_ETH_TYPE_MPLS_MCAST, sizeof(__pyx_k_ETH_TYPE_MPLS_MCAST), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_PPPOE, __pyx_k_ETH_TYPE_PPPOE, sizeof(__pyx_k_ETH_TYPE_PPPOE), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_PPPOEDISC, __pyx_k_ETH_TYPE_PPPOEDISC, sizeof(__pyx_k_ETH_TYPE_PPPOEDISC), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_PUP, __pyx_k_ETH_TYPE_PUP, sizeof(__pyx_k_ETH_TYPE_PUP), 0, 0, 1, 1}, + {&__pyx_n_s_ETH_TYPE_REVARP, __pyx_k_ETH_TYPE_REVARP, sizeof(__pyx_k_ETH_TYPE_REVARP), 0, 0, 1, 1}, + {&__pyx_n_s_FW_DIR_IN, __pyx_k_FW_DIR_IN, sizeof(__pyx_k_FW_DIR_IN), 0, 0, 1, 1}, + {&__pyx_n_s_FW_DIR_OUT, __pyx_k_FW_DIR_OUT, sizeof(__pyx_k_FW_DIR_OUT), 0, 0, 1, 1}, + {&__pyx_n_s_FW_OP_ALLOW, __pyx_k_FW_OP_ALLOW, sizeof(__pyx_k_FW_OP_ALLOW), 0, 0, 1, 1}, + {&__pyx_n_s_FW_OP_BLOCK, __pyx_k_FW_OP_BLOCK, sizeof(__pyx_k_FW_OP_BLOCK), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_BROADCAST, __pyx_k_INTF_FLAG_BROADCAST, sizeof(__pyx_k_INTF_FLAG_BROADCAST), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_LOOPBACK, __pyx_k_INTF_FLAG_LOOPBACK, sizeof(__pyx_k_INTF_FLAG_LOOPBACK), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_MULTICAST, __pyx_k_INTF_FLAG_MULTICAST, sizeof(__pyx_k_INTF_FLAG_MULTICAST), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_NOARP, __pyx_k_INTF_FLAG_NOARP, sizeof(__pyx_k_INTF_FLAG_NOARP), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_POINTOPOINT, __pyx_k_INTF_FLAG_POINTOPOINT, sizeof(__pyx_k_INTF_FLAG_POINTOPOINT), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_FLAG_UP, __pyx_k_INTF_FLAG_UP, sizeof(__pyx_k_INTF_FLAG_UP), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_TYPE_ETH, __pyx_k_INTF_TYPE_ETH, sizeof(__pyx_k_INTF_TYPE_ETH), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_TYPE_LOOPBACK, __pyx_k_INTF_TYPE_LOOPBACK, sizeof(__pyx_k_INTF_TYPE_LOOPBACK), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_TYPE_OTHER, __pyx_k_INTF_TYPE_OTHER, sizeof(__pyx_k_INTF_TYPE_OTHER), 0, 0, 1, 1}, + {&__pyx_n_s_INTF_TYPE_TUN, __pyx_k_INTF_TYPE_TUN, sizeof(__pyx_k_INTF_TYPE_TUN), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_ADDR_BITS, __pyx_k_IP6_ADDR_BITS, sizeof(__pyx_k_IP6_ADDR_BITS), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_ADDR_LEN, __pyx_k_IP6_ADDR_LEN, sizeof(__pyx_k_IP6_ADDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_ADDR_LOOPBACK, __pyx_k_IP6_ADDR_LOOPBACK, sizeof(__pyx_k_IP6_ADDR_LOOPBACK), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_ADDR_UNSPEC, __pyx_k_IP6_ADDR_UNSPEC, sizeof(__pyx_k_IP6_ADDR_UNSPEC), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_HDR_LEN, __pyx_k_IP6_HDR_LEN, sizeof(__pyx_k_IP6_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_HLIM_DEFAULT, __pyx_k_IP6_HLIM_DEFAULT, sizeof(__pyx_k_IP6_HLIM_DEFAULT), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_HLIM_MAX, __pyx_k_IP6_HLIM_MAX, sizeof(__pyx_k_IP6_HLIM_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_LEN_MAX, __pyx_k_IP6_LEN_MAX, sizeof(__pyx_k_IP6_LEN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_LEN_MIN, __pyx_k_IP6_LEN_MIN, sizeof(__pyx_k_IP6_LEN_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_IP6_MTU_MIN, __pyx_k_IP6_MTU_MIN, sizeof(__pyx_k_IP6_MTU_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_ANY, __pyx_k_IP_ADDR_ANY, sizeof(__pyx_k_IP_ADDR_ANY), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_BITS, __pyx_k_IP_ADDR_BITS, sizeof(__pyx_k_IP_ADDR_BITS), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_BROADCAST, __pyx_k_IP_ADDR_BROADCAST, sizeof(__pyx_k_IP_ADDR_BROADCAST), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_LEN, __pyx_k_IP_ADDR_LEN, sizeof(__pyx_k_IP_ADDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_LOOPBACK, __pyx_k_IP_ADDR_LOOPBACK, sizeof(__pyx_k_IP_ADDR_LOOPBACK), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_MCAST_ALL, __pyx_k_IP_ADDR_MCAST_ALL, sizeof(__pyx_k_IP_ADDR_MCAST_ALL), 0, 0, 1, 1}, + {&__pyx_n_s_IP_ADDR_MCAST_LOCAL, __pyx_k_IP_ADDR_MCAST_LOCAL, sizeof(__pyx_k_IP_ADDR_MCAST_LOCAL), 0, 0, 1, 1}, + {&__pyx_n_s_IP_DF, __pyx_k_IP_DF, sizeof(__pyx_k_IP_DF), 0, 0, 1, 1}, + {&__pyx_n_s_IP_HDR_LEN, __pyx_k_IP_HDR_LEN, sizeof(__pyx_k_IP_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_IP_HDR_LEN_MAX, __pyx_k_IP_HDR_LEN_MAX, sizeof(__pyx_k_IP_HDR_LEN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP_LEN_MAX, __pyx_k_IP_LEN_MAX, sizeof(__pyx_k_IP_LEN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP_LEN_MIN, __pyx_k_IP_LEN_MIN, sizeof(__pyx_k_IP_LEN_MIN), 0, 0, 1, 1}, + {&__pyx_n_s_IP_MF, __pyx_k_IP_MF, sizeof(__pyx_k_IP_MF), 0, 0, 1, 1}, + {&__pyx_n_s_IP_OFFMASK, __pyx_k_IP_OFFMASK, sizeof(__pyx_k_IP_OFFMASK), 0, 0, 1, 1}, + {&__pyx_n_s_IP_OPT_LEN, __pyx_k_IP_OPT_LEN, sizeof(__pyx_k_IP_OPT_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_IP_OPT_LEN_MAX, __pyx_k_IP_OPT_LEN_MAX, sizeof(__pyx_k_IP_OPT_LEN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_AH, __pyx_k_IP_PROTO_AH, sizeof(__pyx_k_IP_PROTO_AH), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_ESP, __pyx_k_IP_PROTO_ESP, sizeof(__pyx_k_IP_PROTO_ESP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_GRE, __pyx_k_IP_PROTO_GRE, sizeof(__pyx_k_IP_PROTO_GRE), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_ICMP, __pyx_k_IP_PROTO_ICMP, sizeof(__pyx_k_IP_PROTO_ICMP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_ICMPV6, __pyx_k_IP_PROTO_ICMPV6, sizeof(__pyx_k_IP_PROTO_ICMPV6), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_IGMP, __pyx_k_IP_PROTO_IGMP, sizeof(__pyx_k_IP_PROTO_IGMP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_IP, __pyx_k_IP_PROTO_IP, sizeof(__pyx_k_IP_PROTO_IP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_IPV6, __pyx_k_IP_PROTO_IPV6, sizeof(__pyx_k_IP_PROTO_IPV6), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_MAX, __pyx_k_IP_PROTO_MAX, sizeof(__pyx_k_IP_PROTO_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_RAW, __pyx_k_IP_PROTO_RAW, sizeof(__pyx_k_IP_PROTO_RAW), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_RESERVED, __pyx_k_IP_PROTO_RESERVED, sizeof(__pyx_k_IP_PROTO_RESERVED), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_TCP, __pyx_k_IP_PROTO_TCP, sizeof(__pyx_k_IP_PROTO_TCP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_PROTO_UDP, __pyx_k_IP_PROTO_UDP, sizeof(__pyx_k_IP_PROTO_UDP), 0, 0, 1, 1}, + {&__pyx_n_s_IP_RF, __pyx_k_IP_RF, sizeof(__pyx_k_IP_RF), 0, 0, 1, 1}, + {&__pyx_n_s_IP_TOS_DEFAULT, __pyx_k_IP_TOS_DEFAULT, sizeof(__pyx_k_IP_TOS_DEFAULT), 0, 0, 1, 1}, + {&__pyx_n_s_IP_TTL_DEFAULT, __pyx_k_IP_TTL_DEFAULT, sizeof(__pyx_k_IP_TTL_DEFAULT), 0, 0, 1, 1}, + {&__pyx_n_s_IP_TTL_MAX, __pyx_k_IP_TTL_MAX, sizeof(__pyx_k_IP_TTL_MAX), 0, 0, 1, 1}, + {&__pyx_kp_s_Incompatible_checksums_s_vs_0xd0, __pyx_k_Incompatible_checksums_s_vs_0xd0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xd0), 0, 0, 1, 0}, + {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1}, + {&__pyx_n_s_OSError, __pyx_k_OSError, sizeof(__pyx_k_OSError), 0, 0, 1, 1}, + {&__pyx_kp_u_Oliver_Falk_oliver_linux_kernel, __pyx_k_Oliver_Falk_oliver_linux_kernel, sizeof(__pyx_k_Oliver_Falk_oliver_linux_kernel), 0, 1, 0, 0}, + {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1}, + {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, + {&__pyx_kp_s_Pickling_of_struct_members_such, __pyx_k_Pickling_of_struct_members_such, sizeof(__pyx_k_Pickling_of_struct_members_such), 0, 0, 1, 0}, + {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_HDR_LEN, __pyx_k_TCP_HDR_LEN, sizeof(__pyx_k_TCP_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_ALTSUM, __pyx_k_TCP_OPT_ALTSUM, sizeof(__pyx_k_TCP_OPT_ALTSUM), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_ALTSUMDATA, __pyx_k_TCP_OPT_ALTSUMDATA, sizeof(__pyx_k_TCP_OPT_ALTSUMDATA), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_BUBBA, __pyx_k_TCP_OPT_BUBBA, sizeof(__pyx_k_TCP_OPT_BUBBA), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_CC, __pyx_k_TCP_OPT_CC, sizeof(__pyx_k_TCP_OPT_CC), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_CCECHO, __pyx_k_TCP_OPT_CCECHO, sizeof(__pyx_k_TCP_OPT_CCECHO), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_CCNEW, __pyx_k_TCP_OPT_CCNEW, sizeof(__pyx_k_TCP_OPT_CCNEW), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_CORRUPT, __pyx_k_TCP_OPT_CORRUPT, sizeof(__pyx_k_TCP_OPT_CORRUPT), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_ECHO, __pyx_k_TCP_OPT_ECHO, sizeof(__pyx_k_TCP_OPT_ECHO), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_ECHOREPLY, __pyx_k_TCP_OPT_ECHOREPLY, sizeof(__pyx_k_TCP_OPT_ECHOREPLY), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_EOL, __pyx_k_TCP_OPT_EOL, sizeof(__pyx_k_TCP_OPT_EOL), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_MAX, __pyx_k_TCP_OPT_MAX, sizeof(__pyx_k_TCP_OPT_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_MD5, __pyx_k_TCP_OPT_MD5, sizeof(__pyx_k_TCP_OPT_MD5), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_MSS, __pyx_k_TCP_OPT_MSS, sizeof(__pyx_k_TCP_OPT_MSS), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_NOP, __pyx_k_TCP_OPT_NOP, sizeof(__pyx_k_TCP_OPT_NOP), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_POCONN, __pyx_k_TCP_OPT_POCONN, sizeof(__pyx_k_TCP_OPT_POCONN), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_POSVC, __pyx_k_TCP_OPT_POSVC, sizeof(__pyx_k_TCP_OPT_POSVC), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_REC, __pyx_k_TCP_OPT_REC, sizeof(__pyx_k_TCP_OPT_REC), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SACK, __pyx_k_TCP_OPT_SACK, sizeof(__pyx_k_TCP_OPT_SACK), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SACKOK, __pyx_k_TCP_OPT_SACKOK, sizeof(__pyx_k_TCP_OPT_SACKOK), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SCPS, __pyx_k_TCP_OPT_SCPS, sizeof(__pyx_k_TCP_OPT_SCPS), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SKEETER, __pyx_k_TCP_OPT_SKEETER, sizeof(__pyx_k_TCP_OPT_SKEETER), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SNACK, __pyx_k_TCP_OPT_SNACK, sizeof(__pyx_k_TCP_OPT_SNACK), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_SNAP, __pyx_k_TCP_OPT_SNAP, sizeof(__pyx_k_TCP_OPT_SNAP), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_TCPCOMP, __pyx_k_TCP_OPT_TCPCOMP, sizeof(__pyx_k_TCP_OPT_TCPCOMP), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_TIMESTAMP, __pyx_k_TCP_OPT_TIMESTAMP, sizeof(__pyx_k_TCP_OPT_TIMESTAMP), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_TRAILSUM, __pyx_k_TCP_OPT_TRAILSUM, sizeof(__pyx_k_TCP_OPT_TRAILSUM), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_OPT_WSCALE, __pyx_k_TCP_OPT_WSCALE, sizeof(__pyx_k_TCP_OPT_WSCALE), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_PORT_MAX, __pyx_k_TCP_PORT_MAX, sizeof(__pyx_k_TCP_PORT_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_TCP_WIN_MAX, __pyx_k_TCP_WIN_MAX, sizeof(__pyx_k_TCP_WIN_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_TH_ACK, __pyx_k_TH_ACK, sizeof(__pyx_k_TH_ACK), 0, 0, 1, 1}, + {&__pyx_n_s_TH_CWR, __pyx_k_TH_CWR, sizeof(__pyx_k_TH_CWR), 0, 0, 1, 1}, + {&__pyx_n_s_TH_ECE, __pyx_k_TH_ECE, sizeof(__pyx_k_TH_ECE), 0, 0, 1, 1}, + {&__pyx_n_s_TH_FIN, __pyx_k_TH_FIN, sizeof(__pyx_k_TH_FIN), 0, 0, 1, 1}, + {&__pyx_n_s_TH_PUSH, __pyx_k_TH_PUSH, sizeof(__pyx_k_TH_PUSH), 0, 0, 1, 1}, + {&__pyx_n_s_TH_RST, __pyx_k_TH_RST, sizeof(__pyx_k_TH_RST), 0, 0, 1, 1}, + {&__pyx_n_s_TH_SYN, __pyx_k_TH_SYN, sizeof(__pyx_k_TH_SYN), 0, 0, 1, 1}, + {&__pyx_n_s_TH_URG, __pyx_k_TH_URG, sizeof(__pyx_k_TH_URG), 0, 0, 1, 1}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_UDP_HDR_LEN, __pyx_k_UDP_HDR_LEN, sizeof(__pyx_k_UDP_HDR_LEN), 0, 0, 1, 1}, + {&__pyx_n_s_UDP_PORT_MAX, __pyx_k_UDP_PORT_MAX, sizeof(__pyx_k_UDP_PORT_MAX), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_ack, __pyx_k_ack, sizeof(__pyx_k_ack), 0, 0, 1, 1}, + {&__pyx_n_s_addr, __pyx_k_addr, sizeof(__pyx_k_addr), 0, 0, 1, 1}, + {&__pyx_n_u_addr, __pyx_k_addr, sizeof(__pyx_k_addr), 0, 1, 0, 1}, + {&__pyx_n_s_addr_ip4_iter, __pyx_k_addr_ip4_iter, sizeof(__pyx_k_addr_ip4_iter), 0, 0, 1, 1}, + {&__pyx_n_s_addrtxt, __pyx_k_addrtxt, sizeof(__pyx_k_addrtxt), 0, 0, 1, 1}, + {&__pyx_n_s_addrtype, __pyx_k_addrtype, sizeof(__pyx_k_addrtype), 0, 0, 1, 1}, + {&__pyx_n_u_alias_addrs, __pyx_k_alias_addrs, sizeof(__pyx_k_alias_addrs), 0, 1, 0, 1}, + {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1}, + {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1}, + {&__pyx_n_s_arp, __pyx_k_arp, sizeof(__pyx_k_arp), 0, 0, 1, 1}, + {&__pyx_n_s_arp_pack_hdr_ethip, __pyx_k_arp_pack_hdr_ethip, sizeof(__pyx_k_arp_pack_hdr_ethip), 0, 0, 1, 1}, + {&__pyx_n_s_author, __pyx_k_author, sizeof(__pyx_k_author), 0, 0, 1, 1}, + {&__pyx_n_s_buf, __pyx_k_buf, sizeof(__pyx_k_buf), 0, 0, 1, 1}, + {&__pyx_kp_u_byte_binary_string, __pyx_k_byte_binary_string, sizeof(__pyx_k_byte_binary_string), 0, 1, 0, 0}, + {&__pyx_n_s_callback, __pyx_k_callback, sizeof(__pyx_k_callback), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 0, 1, 1}, + {&__pyx_n_s_copy, __pyx_k_copy, sizeof(__pyx_k_copy), 0, 0, 1, 1}, + {&__pyx_n_s_copyright, __pyx_k_copyright, sizeof(__pyx_k_copyright), 0, 0, 1, 1}, + {&__pyx_n_s_cur, __pyx_k_cur, sizeof(__pyx_k_cur), 0, 0, 1, 1}, + {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1}, + {&__pyx_n_u_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 1, 0, 1}, + {&__pyx_n_s_device, __pyx_k_device, sizeof(__pyx_k_device), 0, 0, 1, 1}, + {&__pyx_n_u_device, __pyx_k_device, sizeof(__pyx_k_device), 0, 1, 0, 1}, + {&__pyx_n_s_dh, __pyx_k_dh, sizeof(__pyx_k_dh), 0, 0, 1, 1}, + {&__pyx_n_s_dha, __pyx_k_dha, sizeof(__pyx_k_dha), 0, 0, 1, 1}, + {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_u_dir, __pyx_k_dir, sizeof(__pyx_k_dir), 0, 1, 0, 1}, + {&__pyx_n_s_dnet, __pyx_k_dnet, sizeof(__pyx_k_dnet), 0, 0, 1, 1}, + {&__pyx_kp_s_dnet_pyx, __pyx_k_dnet_pyx, sizeof(__pyx_k_dnet_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_dp, __pyx_k_dp, sizeof(__pyx_k_dp), 0, 0, 1, 1}, + {&__pyx_n_s_dpa, __pyx_k_dpa, sizeof(__pyx_k_dpa), 0, 0, 1, 1}, + {&__pyx_n_s_dport, __pyx_k_dport, sizeof(__pyx_k_dport), 0, 0, 1, 1}, + {&__pyx_n_u_dport, __pyx_k_dport, sizeof(__pyx_k_dport), 0, 1, 0, 1}, + {&__pyx_n_s_dst, __pyx_k_dst, sizeof(__pyx_k_dst), 0, 0, 1, 1}, + {&__pyx_n_u_dst, __pyx_k_dst, sizeof(__pyx_k_dst), 0, 1, 0, 1}, + {&__pyx_n_u_dst_addr, __pyx_k_dst_addr, sizeof(__pyx_k_dst_addr), 0, 1, 0, 1}, + {&__pyx_n_s_ea, __pyx_k_ea, sizeof(__pyx_k_ea), 0, 0, 1, 1}, + {&__pyx_n_s_entry, __pyx_k_entry, sizeof(__pyx_k_entry), 0, 0, 1, 1}, + {&__pyx_n_s_eth, __pyx_k_eth, sizeof(__pyx_k_eth), 0, 0, 1, 1}, + {&__pyx_n_s_eth_aton, __pyx_k_eth_aton, sizeof(__pyx_k_eth_aton), 0, 0, 1, 1}, + {&__pyx_n_s_eth_ntoa, __pyx_k_eth_ntoa, sizeof(__pyx_k_eth_ntoa), 0, 0, 1, 1}, + {&__pyx_n_s_eth_pack_hdr, __pyx_k_eth_pack_hdr, sizeof(__pyx_k_eth_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_etype, __pyx_k_etype, sizeof(__pyx_k_etype), 0, 0, 1, 1}, + {&__pyx_n_s_fc, __pyx_k_fc, sizeof(__pyx_k_fc), 0, 0, 1, 1}, + {&__pyx_n_s_fl, __pyx_k_fl, sizeof(__pyx_k_fl), 0, 0, 1, 1}, + {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_u_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 1, 0, 1}, + {&__pyx_n_s_fw, __pyx_k_fw, sizeof(__pyx_k_fw), 0, 0, 1, 1}, + {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, + {&__pyx_n_s_gw, __pyx_k_gw, sizeof(__pyx_k_gw), 0, 0, 1, 1}, + {&__pyx_n_s_ha, __pyx_k_ha, sizeof(__pyx_k_ha), 0, 0, 1, 1}, + {&__pyx_n_s_hdr, __pyx_k_hdr, sizeof(__pyx_k_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_hlim, __pyx_k_hlim, sizeof(__pyx_k_hlim), 0, 0, 1, 1}, + {&__pyx_kp_u_https_github_com_ofalk_libdnet, __pyx_k_https_github_com_ofalk_libdnet, sizeof(__pyx_k_https_github_com_ofalk_libdnet), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, + {&__pyx_n_s_ia, __pyx_k_ia, sizeof(__pyx_k_ia), 0, 0, 1, 1}, + {&__pyx_n_s_icmp_pack_hdr, __pyx_k_icmp_pack_hdr, sizeof(__pyx_k_icmp_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1}, + {&__pyx_n_s_intf, __pyx_k_intf, sizeof(__pyx_k_intf), 0, 0, 1, 1}, + {&__pyx_kp_u_invalid_Ethernet_address, __pyx_k_invalid_Ethernet_address, sizeof(__pyx_k_invalid_Ethernet_address), 0, 1, 0, 0}, + {&__pyx_kp_u_invalid_IP_address, __pyx_k_invalid_IP_address, sizeof(__pyx_k_invalid_IP_address), 0, 1, 0, 0}, + {&__pyx_kp_u_invalid_IPv6_address, __pyx_k_invalid_IPv6_address, sizeof(__pyx_k_invalid_IPv6_address), 0, 1, 0, 0}, + {&__pyx_kp_u_invalid_network_address, __pyx_k_invalid_network_address, sizeof(__pyx_k_invalid_network_address), 0, 1, 0, 0}, + {&__pyx_kp_u_invalid_network_address_2, __pyx_k_invalid_network_address_2, sizeof(__pyx_k_invalid_network_address_2), 0, 1, 0, 0}, + {&__pyx_n_s_ip, __pyx_k_ip, sizeof(__pyx_k_ip), 0, 0, 1, 1}, + {&__pyx_n_s_ip6, __pyx_k_ip6, sizeof(__pyx_k_ip6), 0, 0, 1, 1}, + {&__pyx_n_s_ip6_aton, __pyx_k_ip6_aton, sizeof(__pyx_k_ip6_aton), 0, 0, 1, 1}, + {&__pyx_n_s_ip6_checksum, __pyx_k_ip6_checksum, sizeof(__pyx_k_ip6_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_ip6_ntoa, __pyx_k_ip6_ntoa, sizeof(__pyx_k_ip6_ntoa), 0, 0, 1, 1}, + {&__pyx_n_s_ip6_pack_hdr, __pyx_k_ip6_pack_hdr, sizeof(__pyx_k_ip6_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_ip_aton, __pyx_k_ip_aton, sizeof(__pyx_k_ip_aton), 0, 0, 1, 1}, + {&__pyx_n_s_ip_checksum, __pyx_k_ip_checksum, sizeof(__pyx_k_ip_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_ip_cksum_add, __pyx_k_ip_cksum_add, sizeof(__pyx_k_ip_cksum_add), 0, 0, 1, 1}, + {&__pyx_n_s_ip_cksum_carry, __pyx_k_ip_cksum_carry, sizeof(__pyx_k_ip_cksum_carry), 0, 0, 1, 1}, + {&__pyx_n_s_ip_ntoa, __pyx_k_ip_ntoa, sizeof(__pyx_k_ip_ntoa), 0, 0, 1, 1}, + {&__pyx_n_s_ip_pack_hdr, __pyx_k_ip_pack_hdr, sizeof(__pyx_k_ip_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_iter_append, __pyx_k_iter_append, sizeof(__pyx_k_iter_append), 0, 0, 1, 1}, + {&__pyx_n_s_itype, __pyx_k_itype, sizeof(__pyx_k_itype), 0, 0, 1, 1}, + {&__pyx_n_s_l, __pyx_k_l, sizeof(__pyx_k_l), 0, 0, 1, 1}, + {&__pyx_n_s_len, __pyx_k_len, sizeof(__pyx_k_len), 0, 0, 1, 1}, + {&__pyx_n_s_license, __pyx_k_license, sizeof(__pyx_k_license), 0, 0, 1, 1}, + {&__pyx_n_u_link_addr, __pyx_k_link_addr, sizeof(__pyx_k_link_addr), 0, 1, 0, 1}, + {&__pyx_n_s_loop, __pyx_k_loop, sizeof(__pyx_k_loop), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1}, + {&__pyx_n_s_mtu, __pyx_k_mtu, sizeof(__pyx_k_mtu), 0, 0, 1, 1}, + {&__pyx_n_u_mtu, __pyx_k_mtu, sizeof(__pyx_k_mtu), 0, 1, 0, 1}, + {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, + {&__pyx_n_u_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 1, 0, 1}, + {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, + {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, + {&__pyx_kp_u_non_Ethernet_address, __pyx_k_non_Ethernet_address, sizeof(__pyx_k_non_Ethernet_address), 0, 1, 0, 0}, + {&__pyx_kp_u_non_IP_address, __pyx_k_non_IP_address, sizeof(__pyx_k_non_IP_address), 0, 1, 0, 0}, + {&__pyx_kp_u_non_IPv6_address, __pyx_k_non_IPv6_address, sizeof(__pyx_k_non_IPv6_address), 0, 1, 0, 0}, + {&__pyx_kp_u_not_a, __pyx_k_not_a, sizeof(__pyx_k_not_a), 0, 1, 0, 0}, + {&__pyx_kp_u_not_a_16_byte_string, __pyx_k_not_a_16_byte_string, sizeof(__pyx_k_not_a_16_byte_string), 0, 1, 0, 0}, + {&__pyx_kp_u_not_a_4_byte_string, __pyx_k_not_a_4_byte_string, sizeof(__pyx_k_not_a_4_byte_string), 0, 1, 0, 0}, + {&__pyx_kp_u_not_a_6_byte_string, __pyx_k_not_a_6_byte_string, sizeof(__pyx_k_not_a_6_byte_string), 0, 1, 0, 0}, + {&__pyx_n_s_nxt, __pyx_k_nxt, sizeof(__pyx_k_nxt), 0, 0, 1, 1}, + {&__pyx_n_s_off, __pyx_k_off, sizeof(__pyx_k_off), 0, 0, 1, 1}, + {&__pyx_n_s_op, __pyx_k_op, sizeof(__pyx_k_op), 0, 0, 1, 1}, + {&__pyx_n_u_op, __pyx_k_op, sizeof(__pyx_k_op), 0, 1, 0, 1}, + {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1}, + {&__pyx_n_s_pa, __pyx_k_pa, sizeof(__pyx_k_pa), 0, 0, 1, 1}, + {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, + {&__pyx_n_s_pkt, __pyx_k_pkt, sizeof(__pyx_k_pkt), 0, 0, 1, 1}, + {&__pyx_n_s_plen, __pyx_k_plen, sizeof(__pyx_k_plen), 0, 0, 1, 1}, + {&__pyx_n_u_proto, __pyx_k_proto, sizeof(__pyx_k_proto), 0, 1, 0, 1}, + {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle___addr_ip4_iter, __pyx_k_pyx_unpickle___addr_ip4_iter, sizeof(__pyx_k_pyx_unpickle___addr_ip4_iter), 0, 0, 1, 1}, + {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1}, + {&__pyx_n_s_rand, __pyx_k_rand, sizeof(__pyx_k_rand), 0, 0, 1, 1}, + {&__pyx_n_s_rand_xrange, __pyx_k_rand_xrange, sizeof(__pyx_k_rand_xrange), 0, 0, 1, 1}, + {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, + {&__pyx_n_s_route, __pyx_k_route, sizeof(__pyx_k_route), 0, 0, 1, 1}, + {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1}, + {&__pyx_kp_s_self_arp_cannot_be_converted_to, __pyx_k_self_arp_cannot_be_converted_to, sizeof(__pyx_k_self_arp_cannot_be_converted_to), 0, 0, 1, 0}, + {&__pyx_kp_s_self_eth_cannot_be_converted_to, __pyx_k_self_eth_cannot_be_converted_to, sizeof(__pyx_k_self_eth_cannot_be_converted_to), 0, 0, 1, 0}, + {&__pyx_kp_s_self_fw_cannot_be_converted_to_a, __pyx_k_self_fw_cannot_be_converted_to_a, sizeof(__pyx_k_self_fw_cannot_be_converted_to_a), 0, 0, 1, 0}, + {&__pyx_kp_s_self_intf_cannot_be_converted_to, __pyx_k_self_intf_cannot_be_converted_to, sizeof(__pyx_k_self_intf_cannot_be_converted_to), 0, 0, 1, 0}, + {&__pyx_kp_s_self_ip_cannot_be_converted_to_a, __pyx_k_self_ip_cannot_be_converted_to_a, sizeof(__pyx_k_self_ip_cannot_be_converted_to_a), 0, 0, 1, 0}, + {&__pyx_kp_s_self_rand_cannot_be_converted_to, __pyx_k_self_rand_cannot_be_converted_to, sizeof(__pyx_k_self_rand_cannot_be_converted_to), 0, 0, 1, 0}, + {&__pyx_kp_s_self_route_cannot_be_converted_t, __pyx_k_self_route_cannot_be_converted_t, sizeof(__pyx_k_self_route_cannot_be_converted_t), 0, 0, 1, 0}, + {&__pyx_kp_s_self_tun_cannot_be_converted_to, __pyx_k_self_tun_cannot_be_converted_to, sizeof(__pyx_k_self_tun_cannot_be_converted_to), 0, 0, 1, 0}, + {&__pyx_n_s_seq, __pyx_k_seq, sizeof(__pyx_k_seq), 0, 0, 1, 1}, + {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, + {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_sh, __pyx_k_sh, sizeof(__pyx_k_sh), 0, 0, 1, 1}, + {&__pyx_n_s_sha, __pyx_k_sha, sizeof(__pyx_k_sha), 0, 0, 1, 1}, + {&__pyx_n_s_sp, __pyx_k_sp, sizeof(__pyx_k_sp), 0, 0, 1, 1}, + {&__pyx_n_s_spa, __pyx_k_spa, sizeof(__pyx_k_spa), 0, 0, 1, 1}, + {&__pyx_n_s_sport, __pyx_k_sport, sizeof(__pyx_k_sport), 0, 0, 1, 1}, + {&__pyx_n_u_sport, __pyx_k_sport, sizeof(__pyx_k_sport), 0, 1, 0, 1}, + {&__pyx_n_s_src, __pyx_k_src, sizeof(__pyx_k_src), 0, 0, 1, 1}, + {&__pyx_n_u_src, __pyx_k_src, sizeof(__pyx_k_src), 0, 1, 0, 1}, + {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_kp_u_start_must_be_an_integer, __pyx_k_start_must_be_an_integer, sizeof(__pyx_k_start_must_be_an_integer), 0, 1, 0, 0}, + {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, + {&__pyx_kp_u_stop_must_be_an_integer, __pyx_k_stop_must_be_an_integer, sizeof(__pyx_k_stop_must_be_an_integer), 0, 1, 0, 0}, + {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, + {&__pyx_n_s_sum, __pyx_k_sum, sizeof(__pyx_k_sum), 0, 0, 1, 1}, + {&__pyx_n_s_tcp_pack_hdr, __pyx_k_tcp_pack_hdr, sizeof(__pyx_k_tcp_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_tos, __pyx_k_tos, sizeof(__pyx_k_tos), 0, 0, 1, 1}, + {&__pyx_n_s_ttl, __pyx_k_ttl, sizeof(__pyx_k_ttl), 0, 0, 1, 1}, + {&__pyx_n_s_tun, __pyx_k_tun, sizeof(__pyx_k_tun), 0, 0, 1, 1}, + {&__pyx_n_u_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 1, 0, 1}, + {&__pyx_n_s_udp_pack_hdr, __pyx_k_udp_pack_hdr, sizeof(__pyx_k_udp_pack_hdr), 0, 0, 1, 1}, + {&__pyx_n_s_ulen, __pyx_k_ulen, sizeof(__pyx_k_ulen), 0, 0, 1, 1}, + {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, + {&__pyx_n_s_urp, __pyx_k_urp, sizeof(__pyx_k_urp), 0, 0, 1, 1}, + {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, + {&__pyx_n_s_win, __pyx_k_win, sizeof(__pyx_k_win), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 48, __pyx_L1_error) + __pyx_builtin_OSError = __Pyx_GetBuiltinName(__pyx_n_s_OSError); if (!__pyx_builtin_OSError) __PYX_ERR(0, 115, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error) + __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(0, 461, __pyx_L1_error) + __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 551, __pyx_L1_error) + __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 654, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_self_eth_cannot_be_converted_to); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "(tree fragment)":4 + * raise TypeError("self.eth cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.eth cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_self_eth_cannot_be_converted_to); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_self_ip_cannot_be_converted_to_a); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "(tree fragment)":4 + * raise TypeError("self.ip cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.ip cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_self_ip_cannot_be_converted_to_a); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + */ + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_Pickling_of_struct_members_such); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + + /* "(tree fragment)":4 + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("Pickling of struct members such as self._addr must be explicitly requested with @auto_pickle(True)") # <<<<<<<<<<<<<< + */ + __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_Pickling_of_struct_members_such); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + */ + __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_self_arp_cannot_be_converted_to); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + + /* "(tree fragment)":4 + * raise TypeError("self.arp cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.arp cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_self_arp_cannot_be_converted_to); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + */ + __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_self_intf_cannot_be_converted_to); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + + /* "(tree fragment)":4 + * raise TypeError("self.intf cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.intf cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_self_intf_cannot_be_converted_to); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.route cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.route cannot be converted to a Python object for pickling") + */ + __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_self_route_cannot_be_converted_t); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + + /* "(tree fragment)":4 + * raise TypeError("self.route cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.route cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_self_route_cannot_be_converted_t); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + */ + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_self_fw_cannot_be_converted_to_a); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + + /* "(tree fragment)":4 + * raise TypeError("self.fw cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.fw cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_self_fw_cannot_be_converted_to_a); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_self_rand_cannot_be_converted_to); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + + /* "(tree fragment)":4 + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_self_rand_cannot_be_converted_to); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + */ + __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_self_rand_cannot_be_converted_to); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__39); + __Pyx_GIVEREF(__pyx_tuple__39); + + /* "(tree fragment)":4 + * raise TypeError("self.rand cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.rand cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s_self_rand_cannot_be_converted_to); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + + /* "(tree fragment)":2 + * def __reduce_cython__(self): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + */ + __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_self_tun_cannot_be_converted_to); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(1, 2, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__41); + __Pyx_GIVEREF(__pyx_tuple__41); + + /* "(tree fragment)":4 + * raise TypeError("self.tun cannot be converted to a Python object for pickling") + * def __setstate_cython__(self, __pyx_state): + * raise TypeError("self.tun cannot be converted to a Python object for pickling") # <<<<<<<<<<<<<< + */ + __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_self_tun_cannot_be_converted_to); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + + /* "dnet.pyx":55 + * return strerror(errno) + * + * def __iter_append(entry, l): # <<<<<<<<<<<<<< + * l.append(entry) + * + */ + __pyx_tuple__43 = PyTuple_Pack(2, __pyx_n_s_entry, __pyx_n_s_l); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__43); + __Pyx_GIVEREF(__pyx_tuple__43); + __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_iter_append, 55, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) __PYX_ERR(0, 55, __pyx_L1_error) + + /* "dnet.pyx":150 + * eth_close(self.eth) + * + * def eth_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from 6-byte packed binary string to + * a printable string ('00:de:ad:be:ef:00').""" + */ + __pyx_tuple__45 = PyTuple_Pack(2, __pyx_n_s_buf, __pyx_n_s_ea); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__45); + __Pyx_GIVEREF(__pyx_tuple__45); + __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_eth_ntoa, 150, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(0, 150, __pyx_L1_error) + + /* "dnet.pyx":157 + * return __eth_ntoa(&ea) + * + * def eth_aton(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from a printable string to a + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + */ + __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_buf, __pyx_n_s_ea); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__47); + __Pyx_GIVEREF(__pyx_tuple__47); + __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_eth_aton, 157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(0, 157, __pyx_L1_error) + + /* "dnet.pyx":165 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, # <<<<<<<<<<<<<< + * etype=ETH_TYPE_IP): + * """Return a packed binary string representing an Ethernet header. + */ + __pyx_tuple__49 = PyTuple_Pack(6, __pyx_n_s_dst, __pyx_n_s_src, __pyx_n_s_etype, __pyx_n_s_hdr, __pyx_n_s_s, __pyx_n_s_d); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__49); + __Pyx_GIVEREF(__pyx_tuple__49); + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_eth_pack_hdr, 165, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 165, __pyx_L1_error) + + /* "dnet.pyx":268 + * ip_close(self.ip) + * + * def ip_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a 4-byte packed binary string or + * integer to a printable string ('10.0.0.1').""" + */ + __pyx_tuple__51 = PyTuple_Pack(3, __pyx_n_s_buf, __pyx_n_s_ia, __pyx_n_s_i); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__51); + __Pyx_GIVEREF(__pyx_tuple__51); + __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_ntoa, 268, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(0, 268, __pyx_L1_error) + + /* "dnet.pyx":281 + * return __ip_ntoa(&ia) + * + * def ip_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + __pyx_tuple__53 = PyTuple_Pack(2, __pyx_n_s_buf, __pyx_n_s_ia); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__53); + __Pyx_GIVEREF(__pyx_tuple__53); + __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_aton, 281, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(0, 281, __pyx_L1_error) + + /* "dnet.pyx":289 + * return PyBytes_FromStringAndSize(&ia, 4) + * + * def ip_checksum(pkt): # <<<<<<<<<<<<<< + * """Return packed binary string representing an IP packet + * with the IP and transport-layer checksums set. + */ + __pyx_tuple__55 = PyTuple_Pack(5, __pyx_n_s_pkt, __pyx_n_s_buf, __pyx_n_s_p, __pyx_n_s_n, __pyx_n_s_s); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(0, 289, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__55); + __Pyx_GIVEREF(__pyx_tuple__55); + __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_checksum, 289, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(0, 289, __pyx_L1_error) + + /* "dnet.pyx":312 + * raise TypeError + * + * def ip_cksum_add(buf, int sum): # <<<<<<<<<<<<<< + * cdef char *p + * cdef int n + */ + __pyx_tuple__57 = PyTuple_Pack(4, __pyx_n_s_buf, __pyx_n_s_sum, __pyx_n_s_p, __pyx_n_s_n); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__57); + __Pyx_GIVEREF(__pyx_tuple__57); + __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_cksum_add, 312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(0, 312, __pyx_L1_error) + + /* "dnet.pyx":320 + * raise TypeError + * + * def ip_cksum_carry(int sum): # <<<<<<<<<<<<<< + * return __ip_cksum_carry(sum) + * + */ + __pyx_tuple__59 = PyTuple_Pack(2, __pyx_n_s_sum, __pyx_n_s_sum); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__59); + __Pyx_GIVEREF(__pyx_tuple__59); + __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_cksum_carry, 320, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 320, __pyx_L1_error) + + /* "dnet.pyx":323 + * return __ip_cksum_carry(sum) + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, # <<<<<<<<<<<<<< + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + */ + __pyx_tuple__61 = PyTuple_Pack(11, __pyx_n_s_tos, __pyx_n_s_len, __pyx_n_s_id, __pyx_n_s_off, __pyx_n_s_ttl, __pyx_n_s_p, __pyx_n_s_src, __pyx_n_s_dst, __pyx_n_s_hdr, __pyx_n_s_s, __pyx_n_s_d); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__61); + __Pyx_GIVEREF(__pyx_tuple__61); + __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(8, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip_pack_hdr, 323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 323, __pyx_L1_error) + + /* "dnet.pyx":373 + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) + * + * def ip6_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a 16-byte packed binary string to a + * printable string ('10.0.0.1').""" + */ + __pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_s_buf, __pyx_n_s_ia); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__63); + __Pyx_GIVEREF(__pyx_tuple__63); + __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip6_ntoa, 373, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 373, __pyx_L1_error) + + /* "dnet.pyx":380 + * return __ip6_ntoa(&ia) + * + * def ip6_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + __pyx_tuple__65 = PyTuple_Pack(2, __pyx_n_s_buf, __pyx_n_s_ia); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__65); + __Pyx_GIVEREF(__pyx_tuple__65); + __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip6_aton, 380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 380, __pyx_L1_error) + + /* "dnet.pyx":388 + * return PyBytes_FromStringAndSize(&ia, 16) + * + * def ip6_checksum(buf): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IPv6 packet + * with the IPv6 and transport-layer checksums set. + */ + __pyx_tuple__67 = PyTuple_Pack(1, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__67); + __Pyx_GIVEREF(__pyx_tuple__67); + __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__67, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip6_checksum, 388, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(0, 388, __pyx_L1_error) + + /* "dnet.pyx":398 + * return buf + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, # <<<<<<<<<<<<<< + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): + * """Return a packed binary string representing an IPv6 header. + */ + __pyx_tuple__69 = PyTuple_Pack(10, __pyx_n_s_fc, __pyx_n_s_fl, __pyx_n_s_plen, __pyx_n_s_nxt, __pyx_n_s_hlim, __pyx_n_s_src, __pyx_n_s_dst, __pyx_n_s_hdr, __pyx_n_s_s, __pyx_n_s_d); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__69); + __Pyx_GIVEREF(__pyx_tuple__69); + __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(7, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__69, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_ip6_pack_hdr, 398, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(0, 398, __pyx_L1_error) + + /* "dnet.pyx":772 + * arp_close(self.arp) + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, # <<<<<<<<<<<<<< + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + */ + __pyx_tuple__71 = PyTuple_Pack(10, __pyx_n_s_op, __pyx_n_s_sha, __pyx_n_s_spa, __pyx_n_s_dha, __pyx_n_s_dpa, __pyx_n_s_buf, __pyx_n_s_sh, __pyx_n_s_dh, __pyx_n_s_sp, __pyx_n_s_dp); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 772, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__71); + __Pyx_GIVEREF(__pyx_tuple__71); + __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_arp_pack_hdr_ethip, 772, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 772, __pyx_L1_error) + + /* "dnet.pyx":800 + * void __icmp_pack_hdr "icmp_pack_hdr" (char *hdr, int type, int code) + * + * def icmp_pack_hdr(itype, code): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an ICMP header. + * + */ + __pyx_tuple__73 = PyTuple_Pack(3, __pyx_n_s_itype, __pyx_n_s_code, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 800, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__73); + __Pyx_GIVEREF(__pyx_tuple__73); + __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_icmp_pack_hdr, 800, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(0, 800, __pyx_L1_error) + + /* "dnet.pyx":860 + * TCP_OPT_MAX = 27 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, # <<<<<<<<<<<<<< + * win=TCP_WIN_MAX, urp=0): + * """Return a packed binary string representing a TCP header. + */ + __pyx_tuple__75 = PyTuple_Pack(8, __pyx_n_s_sport, __pyx_n_s_dport, __pyx_n_s_seq, __pyx_n_s_ack, __pyx_n_s_flags, __pyx_n_s_win, __pyx_n_s_urp, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 860, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__75); + __Pyx_GIVEREF(__pyx_tuple__75); + __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(7, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_tcp_pack_hdr, 860, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 860, __pyx_L1_error) + + /* "dnet.pyx":886 + * UDP_PORT_MAX = 65535 + * + * def udp_pack_hdr(sport, dport, ulen=UDP_HDR_LEN): # <<<<<<<<<<<<<< + * """Return a packed binary string representing a UDP header. + * + */ + __pyx_tuple__77 = PyTuple_Pack(4, __pyx_n_s_sport, __pyx_n_s_dport, __pyx_n_s_ulen, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__77); + __Pyx_GIVEREF(__pyx_tuple__77); + __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dnet_pyx, __pyx_n_s_udp_pack_hdr, 886, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 886, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __pyx_unpickle___addr_ip4_iter(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_tuple__79 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__79); + __Pyx_GIVEREF(__pyx_tuple__79); + __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle___addr_ip4_iter, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_10 = PyInt_FromLong(10); if (unlikely(!__pyx_int_10)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_11 = PyInt_FromLong(11); if (unlikely(!__pyx_int_11)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_12 = PyInt_FromLong(12); if (unlikely(!__pyx_int_12)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_13 = PyInt_FromLong(13); if (unlikely(!__pyx_int_13)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_14 = PyInt_FromLong(14); if (unlikely(!__pyx_int_14)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_15 = PyInt_FromLong(15); if (unlikely(!__pyx_int_15)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_16 = PyInt_FromLong(16); if (unlikely(!__pyx_int_16)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_17 = PyInt_FromLong(17); if (unlikely(!__pyx_int_17)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_18 = PyInt_FromLong(18); if (unlikely(!__pyx_int_18)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_19 = PyInt_FromLong(19); if (unlikely(!__pyx_int_19)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_20 = PyInt_FromLong(20); if (unlikely(!__pyx_int_20)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_21 = PyInt_FromLong(21); if (unlikely(!__pyx_int_21)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_22 = PyInt_FromLong(22); if (unlikely(!__pyx_int_22)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_23 = PyInt_FromLong(23); if (unlikely(!__pyx_int_23)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_24 = PyInt_FromLong(24); if (unlikely(!__pyx_int_24)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_26 = PyInt_FromLong(26); if (unlikely(!__pyx_int_26)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_27 = PyInt_FromLong(27); if (unlikely(!__pyx_int_27)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_32 = PyInt_FromLong(32); if (unlikely(!__pyx_int_32)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_40 = PyInt_FromLong(40); if (unlikely(!__pyx_int_40)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_41 = PyInt_FromLong(41); if (unlikely(!__pyx_int_41)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_47 = PyInt_FromLong(47); if (unlikely(!__pyx_int_47)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_48 = PyInt_FromLong(48); if (unlikely(!__pyx_int_48)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_50 = PyInt_FromLong(50); if (unlikely(!__pyx_int_50)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_51 = PyInt_FromLong(51); if (unlikely(!__pyx_int_51)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_53 = PyInt_FromLong(53); if (unlikely(!__pyx_int_53)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_58 = PyInt_FromLong(58); if (unlikely(!__pyx_int_58)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_64 = PyInt_FromLong(64); if (unlikely(!__pyx_int_64)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_128 = PyInt_FromLong(128); if (unlikely(!__pyx_int_128)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_255 = PyInt_FromLong(255); if (unlikely(!__pyx_int_255)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_512 = PyInt_FromLong(512); if (unlikely(!__pyx_int_512)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1024 = PyInt_FromLong(1024); if (unlikely(!__pyx_int_1024)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1280 = PyInt_FromLong(1280); if (unlikely(!__pyx_int_1280)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1500 = PyInt_FromLong(1500); if (unlikely(!__pyx_int_1500)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1518 = PyInt_FromLong(1518); if (unlikely(!__pyx_int_1518)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2048 = PyInt_FromLong(2048); if (unlikely(!__pyx_int_2048)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2054 = PyInt_FromLong(2054); if (unlikely(!__pyx_int_2054)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_8191 = PyInt_FromLong(8191); if (unlikely(!__pyx_int_8191)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_8192 = PyInt_FromLong(8192); if (unlikely(!__pyx_int_8192)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_16384 = PyInt_FromLong(16384L); if (unlikely(!__pyx_int_16384)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_32768 = PyInt_FromLong(32768L); if (unlikely(!__pyx_int_32768)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_32821 = PyInt_FromLong(32821L); if (unlikely(!__pyx_int_32821)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_33024 = PyInt_FromLong(33024L); if (unlikely(!__pyx_int_33024)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_34525 = PyInt_FromLong(34525L); if (unlikely(!__pyx_int_34525)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_34887 = PyInt_FromLong(34887L); if (unlikely(!__pyx_int_34887)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_34888 = PyInt_FromLong(34888L); if (unlikely(!__pyx_int_34888)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_34915 = PyInt_FromLong(34915L); if (unlikely(!__pyx_int_34915)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_34916 = PyInt_FromLong(34916L); if (unlikely(!__pyx_int_34916)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_36864 = PyInt_FromLong(36864L); if (unlikely(!__pyx_int_36864)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_65535 = PyInt_FromLong(65535L); if (unlikely(!__pyx_int_65535)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_218787872 = PyInt_FromLong(218787872L); if (unlikely(!__pyx_int_218787872)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + if (PyType_Ready(&__pyx_type_4dnet_eth) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_eth.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_eth.tp_dictoffset && __pyx_type_4dnet_eth.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_eth.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_eth, (PyObject *)&__pyx_type_4dnet_eth) < 0) __PYX_ERR(0, 105, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_eth) < 0) __PYX_ERR(0, 105, __pyx_L1_error) __pyx_ptype_4dnet_eth = &__pyx_type_4dnet_eth; - if (PyType_Ready(&__pyx_type_4dnet_ip) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "ip", (PyObject *)&__pyx_type_4dnet_ip) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_ip) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_ip.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_ip.tp_dictoffset && __pyx_type_4dnet_ip.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_ip.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ip, (PyObject *)&__pyx_type_4dnet_ip) < 0) __PYX_ERR(0, 243, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_ip) < 0) __PYX_ERR(0, 243, __pyx_L1_error) __pyx_ptype_4dnet_ip = &__pyx_type_4dnet_ip; - if (PyType_Ready(&__pyx_type_4dnet_addr) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "addr", (PyObject *)&__pyx_type_4dnet_addr) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_addr) < 0) __PYX_ERR(0, 439, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_addr.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_addr.tp_dictoffset && __pyx_type_4dnet_addr.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_addr.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_addr, (PyObject *)&__pyx_type_4dnet_addr) < 0) __PYX_ERR(0, 439, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_addr) < 0) __PYX_ERR(0, 439, __pyx_L1_error) __pyx_ptype_4dnet_addr = &__pyx_type_4dnet_addr; - if (PyType_Ready(&__pyx_type_4dnet___addr_ip4_iter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "__addr_ip4_iter", (PyObject *)&__pyx_type_4dnet___addr_ip4_iter) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet___addr_ip4_iter) < 0) __PYX_ERR(0, 636, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet___addr_ip4_iter.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet___addr_ip4_iter.tp_dictoffset && __pyx_type_4dnet___addr_ip4_iter.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet___addr_ip4_iter.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_addr_ip4_iter, (PyObject *)&__pyx_type_4dnet___addr_ip4_iter) < 0) __PYX_ERR(0, 636, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet___addr_ip4_iter) < 0) __PYX_ERR(0, 636, __pyx_L1_error) __pyx_ptype_4dnet___addr_ip4_iter = &__pyx_type_4dnet___addr_ip4_iter; - if (PyType_Ready(&__pyx_type_4dnet_arp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "arp", (PyObject *)&__pyx_type_4dnet_arp) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 689; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_arp) < 0) __PYX_ERR(0, 701, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_arp.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_arp.tp_dictoffset && __pyx_type_4dnet_arp.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_arp.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_arp, (PyObject *)&__pyx_type_4dnet_arp) < 0) __PYX_ERR(0, 701, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_arp) < 0) __PYX_ERR(0, 701, __pyx_L1_error) __pyx_ptype_4dnet_arp = &__pyx_type_4dnet_arp; - if (PyType_Ready(&__pyx_type_4dnet_intf) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "intf", (PyObject *)&__pyx_type_4dnet_intf) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 969; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_intf) < 0) __PYX_ERR(0, 981, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_intf.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_intf.tp_dictoffset && __pyx_type_4dnet_intf.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_intf.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_intf, (PyObject *)&__pyx_type_4dnet_intf) < 0) __PYX_ERR(0, 981, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_intf) < 0) __PYX_ERR(0, 981, __pyx_L1_error) __pyx_ptype_4dnet_intf = &__pyx_type_4dnet_intf; - if (PyType_Ready(&__pyx_type_4dnet_route) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "route", (PyObject *)&__pyx_type_4dnet_route) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_route) < 0) __PYX_ERR(0, 1100, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_route.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_route.tp_dictoffset && __pyx_type_4dnet_route.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_route.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_route, (PyObject *)&__pyx_type_4dnet_route) < 0) __PYX_ERR(0, 1100, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_route) < 0) __PYX_ERR(0, 1100, __pyx_L1_error) __pyx_ptype_4dnet_route = &__pyx_type_4dnet_route; - if (PyType_Ready(&__pyx_type_4dnet_fw) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "fw", (PyObject *)&__pyx_type_4dnet_fw) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1234; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_fw) < 0) __PYX_ERR(0, 1246, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_fw.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_fw.tp_dictoffset && __pyx_type_4dnet_fw.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_fw.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_fw, (PyObject *)&__pyx_type_4dnet_fw) < 0) __PYX_ERR(0, 1246, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_fw) < 0) __PYX_ERR(0, 1246, __pyx_L1_error) __pyx_ptype_4dnet_fw = &__pyx_type_4dnet_fw; - if (PyType_Ready(&__pyx_type_4dnet_rand) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1311; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "rand", (PyObject *)&__pyx_type_4dnet_rand) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1311; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_rand) < 0) __PYX_ERR(0, 1323, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_rand.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_rand.tp_dictoffset && __pyx_type_4dnet_rand.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_rand.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_rand, (PyObject *)&__pyx_type_4dnet_rand) < 0) __PYX_ERR(0, 1323, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_rand) < 0) __PYX_ERR(0, 1323, __pyx_L1_error) __pyx_ptype_4dnet_rand = &__pyx_type_4dnet_rand; - if (PyType_Ready(&__pyx_type_4dnet___rand_xrange) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "__rand_xrange", (PyObject *)&__pyx_type_4dnet___rand_xrange) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1393; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet___rand_xrange) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet___rand_xrange.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet___rand_xrange.tp_dictoffset && __pyx_type_4dnet___rand_xrange.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet___rand_xrange.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_rand_xrange, (PyObject *)&__pyx_type_4dnet___rand_xrange) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet___rand_xrange) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) __pyx_ptype_4dnet___rand_xrange = &__pyx_type_4dnet___rand_xrange; - if (PyType_Ready(&__pyx_type_4dnet_tun) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1477; goto __pyx_L1;} - if (PyObject_SetAttrString(__pyx_m, "tun", (PyObject *)&__pyx_type_4dnet_tun) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1477; goto __pyx_L1;} + if (PyType_Ready(&__pyx_type_4dnet_tun) < 0) __PYX_ERR(0, 1489, __pyx_L1_error) + #if PY_VERSION_HEX < 0x030800B1 + __pyx_type_4dnet_tun.tp_print = 0; + #endif + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_4dnet_tun.tp_dictoffset && __pyx_type_4dnet_tun.tp_getattro == PyObject_GenericGetAttr)) { + __pyx_type_4dnet_tun.tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_tun, (PyObject *)&__pyx_type_4dnet_tun) < 0) __PYX_ERR(0, 1489, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject*)&__pyx_type_4dnet_tun) < 0) __PYX_ERR(0, 1489, __pyx_L1_error) __pyx_ptype_4dnet_tun = &__pyx_type_4dnet_tun; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#ifndef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#elif PY_MAJOR_VERSION < 3 +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" void +#else +#define __Pyx_PyMODINIT_FUNC void +#endif +#else +#ifdef __cplusplus +#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyObject * +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initdnet(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initdnet(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_dnet(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_dnet(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_dnet(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'dnet' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_dnet(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + PyEval_InitThreads(); + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("dnet", __pyx_methods, __pyx_k_dumb_networking_library_This_mod, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_dnet) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "dnet")) { + if (unlikely(PyDict_SetItemString(modules, "dnet", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + (void)__Pyx_modinit_type_import_code(); + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "dnet.pyx":15 + * """ + * + * __author__ = 'Oliver Falk ' # <<<<<<<<<<<<<< + * __copyright__ = 'Copyright (c) 2022 Oliver Falk' + * __license__ = 'BSD' + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_author, __pyx_kp_u_Oliver_Falk_oliver_linux_kernel) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + + /* "dnet.pyx":16 + * + * __author__ = 'Oliver Falk ' + * __copyright__ = 'Copyright (c) 2022 Oliver Falk' # <<<<<<<<<<<<<< + * __license__ = 'BSD' + * __url__ = 'https://github.com/ofalk/libdnet' + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_copyright, __pyx_kp_u_Copyright_c_2022_Oliver_Falk) < 0) __PYX_ERR(0, 16, __pyx_L1_error) + + /* "dnet.pyx":17 + * __author__ = 'Oliver Falk ' + * __copyright__ = 'Copyright (c) 2022 Oliver Falk' + * __license__ = 'BSD' # <<<<<<<<<<<<<< + * __url__ = 'https://github.com/ofalk/libdnet' + * __version__ = '1.16' + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_license, __pyx_n_u_BSD) < 0) __PYX_ERR(0, 17, __pyx_L1_error) + + /* "dnet.pyx":18 + * __copyright__ = 'Copyright (c) 2022 Oliver Falk' + * __license__ = 'BSD' + * __url__ = 'https://github.com/ofalk/libdnet' # <<<<<<<<<<<<<< + * __version__ = '1.16' + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_url, __pyx_kp_u_https_github_com_ofalk_libdnet) < 0) __PYX_ERR(0, 18, __pyx_L1_error) + + /* "dnet.pyx":19 + * __license__ = 'BSD' + * __url__ = 'https://github.com/ofalk/libdnet' + * __version__ = '1.16' # <<<<<<<<<<<<<< + * + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_version, __pyx_kp_u_1_16) < 0) __PYX_ERR(0, 19, __pyx_L1_error) + + /* "dnet.pyx":55 + * return strerror(errno) + * + * def __iter_append(entry, l): # <<<<<<<<<<<<<< + * l.append(entry) + * + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4dnet_1__iter_append, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_iter_append, __pyx_t_1) < 0) __PYX_ERR(0, 55, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":78 + * eth_addr_t dst, eth_addr_t src, int etype) + * + * ETH_ADDR_LEN = 6 # <<<<<<<<<<<<<< + * ETH_ADDR_BITS = 48 + * ETH_TYPE_LEN = 2 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_ADDR_LEN, __pyx_int_6) < 0) __PYX_ERR(0, 78, __pyx_L1_error) + + /* "dnet.pyx":79 + * + * ETH_ADDR_LEN = 6 + * ETH_ADDR_BITS = 48 # <<<<<<<<<<<<<< + * ETH_TYPE_LEN = 2 + * ETH_CRC_LEN = 4 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_ADDR_BITS, __pyx_int_48) < 0) __PYX_ERR(0, 79, __pyx_L1_error) + + /* "dnet.pyx":80 + * ETH_ADDR_LEN = 6 + * ETH_ADDR_BITS = 48 + * ETH_TYPE_LEN = 2 # <<<<<<<<<<<<<< + * ETH_CRC_LEN = 4 + * ETH_HDR_LEN = 14 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_LEN, __pyx_int_2) < 0) __PYX_ERR(0, 80, __pyx_L1_error) + + /* "dnet.pyx":81 + * ETH_ADDR_BITS = 48 + * ETH_TYPE_LEN = 2 + * ETH_CRC_LEN = 4 # <<<<<<<<<<<<<< + * ETH_HDR_LEN = 14 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_CRC_LEN, __pyx_int_4) < 0) __PYX_ERR(0, 81, __pyx_L1_error) + + /* "dnet.pyx":82 + * ETH_TYPE_LEN = 2 + * ETH_CRC_LEN = 4 + * ETH_HDR_LEN = 14 # <<<<<<<<<<<<<< + * + * ETH_LEN_MIN = 64 # /[inserted by cython to avoid comment start]* minimum frame length with CRC *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_HDR_LEN, __pyx_int_14) < 0) __PYX_ERR(0, 82, __pyx_L1_error) + + /* "dnet.pyx":84 + * ETH_HDR_LEN = 14 + * + * ETH_LEN_MIN = 64 # /[inserted by cython to avoid comment start]* minimum frame length with CRC *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_LEN_MAX = 1518 # /[inserted by cython to avoid comment start]* maximum frame length with CRC *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_LEN_MIN, __pyx_int_64) < 0) __PYX_ERR(0, 84, __pyx_L1_error) + + /* "dnet.pyx":85 + * + * ETH_LEN_MIN = 64 # /[inserted by cython to avoid comment start]* minimum frame length with CRC *[inserted by cython to avoid comment closer]/ + * ETH_LEN_MAX = 1518 # /[inserted by cython to avoid comment start]* maximum frame length with CRC *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_LEN_MAX, __pyx_int_1518) < 0) __PYX_ERR(0, 85, __pyx_L1_error) + + /* "dnet.pyx":87 + * ETH_LEN_MAX = 1518 # /[inserted by cython to avoid comment start]* maximum frame length with CRC *[inserted by cython to avoid comment closer]/ + * + * ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) # <<<<<<<<<<<<<< + * ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ETH_LEN_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ETH_HDR_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ETH_CRC_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_MTU, __pyx_t_1) < 0) __PYX_ERR(0, 87, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":88 + * + * ETH_MTU = (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN) + * ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) # <<<<<<<<<<<<<< + * + * ETH_TYPE_PUP = 0x0200 # /[inserted by cython to avoid comment start]* PUP protocol *[inserted by cython to avoid comment closer]/ + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ETH_LEN_MIN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ETH_HDR_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ETH_CRC_LEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_MIN, __pyx_t_1) < 0) __PYX_ERR(0, 88, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":90 + * ETH_MIN = (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN) + * + * ETH_TYPE_PUP = 0x0200 # /[inserted by cython to avoid comment start]* PUP protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_ARP = 0x0806 # /[inserted by cython to avoid comment start]* address resolution protocol *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_PUP, __pyx_int_512) < 0) __PYX_ERR(0, 90, __pyx_L1_error) + + /* "dnet.pyx":91 + * + * ETH_TYPE_PUP = 0x0200 # /[inserted by cython to avoid comment start]* PUP protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_ARP = 0x0806 # /[inserted by cython to avoid comment start]* address resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_REVARP=0x8035 # /[inserted by cython to avoid comment start]* reverse addr resolution protocol *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_IP, __pyx_int_2048) < 0) __PYX_ERR(0, 91, __pyx_L1_error) + + /* "dnet.pyx":92 + * ETH_TYPE_PUP = 0x0200 # /[inserted by cython to avoid comment start]* PUP protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_ARP = 0x0806 # /[inserted by cython to avoid comment start]* address resolution protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_REVARP=0x8035 # /[inserted by cython to avoid comment start]* reverse addr resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_8021Q =0x8100 # /[inserted by cython to avoid comment start]* IEEE 802.1Q VLAN tagging *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_ARP, __pyx_int_2054) < 0) __PYX_ERR(0, 92, __pyx_L1_error) + + /* "dnet.pyx":93 + * ETH_TYPE_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_ARP = 0x0806 # /[inserted by cython to avoid comment start]* address resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_REVARP=0x8035 # /[inserted by cython to avoid comment start]* reverse addr resolution protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_8021Q =0x8100 # /[inserted by cython to avoid comment start]* IEEE 802.1Q VLAN tagging *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_IPV6 = 0x86DD # /[inserted by cython to avoid comment start]* IPv6 protocol *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_REVARP, __pyx_int_32821) < 0) __PYX_ERR(0, 93, __pyx_L1_error) + + /* "dnet.pyx":94 + * ETH_TYPE_ARP = 0x0806 # /[inserted by cython to avoid comment start]* address resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_REVARP=0x8035 # /[inserted by cython to avoid comment start]* reverse addr resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_8021Q =0x8100 # /[inserted by cython to avoid comment start]* IEEE 802.1Q VLAN tagging *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_IPV6 = 0x86DD # /[inserted by cython to avoid comment start]* IPv6 protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS = 0x8847 # /[inserted by cython to avoid comment start]* MPLS *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_8021Q, __pyx_int_33024) < 0) __PYX_ERR(0, 94, __pyx_L1_error) + + /* "dnet.pyx":95 + * ETH_TYPE_REVARP=0x8035 # /[inserted by cython to avoid comment start]* reverse addr resolution protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_8021Q =0x8100 # /[inserted by cython to avoid comment start]* IEEE 802.1Q VLAN tagging *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_IPV6 = 0x86DD # /[inserted by cython to avoid comment start]* IPv6 protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_MPLS = 0x8847 # /[inserted by cython to avoid comment start]* MPLS *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS_MCAST = 0x8848 # /[inserted by cython to avoid comment start]* MPLS Multicast *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_IPV6, __pyx_int_34525) < 0) __PYX_ERR(0, 95, __pyx_L1_error) + + /* "dnet.pyx":96 + * ETH_TYPE_8021Q =0x8100 # /[inserted by cython to avoid comment start]* IEEE 802.1Q VLAN tagging *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_IPV6 = 0x86DD # /[inserted by cython to avoid comment start]* IPv6 protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS = 0x8847 # /[inserted by cython to avoid comment start]* MPLS *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_MPLS_MCAST = 0x8848 # /[inserted by cython to avoid comment start]* MPLS Multicast *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOEDISC = 0x8863 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Discovery Stage *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_MPLS, __pyx_int_34887) < 0) __PYX_ERR(0, 96, __pyx_L1_error) + + /* "dnet.pyx":97 + * ETH_TYPE_IPV6 = 0x86DD # /[inserted by cython to avoid comment start]* IPv6 protocol *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS = 0x8847 # /[inserted by cython to avoid comment start]* MPLS *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS_MCAST = 0x8848 # /[inserted by cython to avoid comment start]* MPLS Multicast *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_PPPOEDISC = 0x8863 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Discovery Stage *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOE = 0x8864 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Session Stage *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_MPLS_MCAST, __pyx_int_34888) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + + /* "dnet.pyx":98 + * ETH_TYPE_MPLS = 0x8847 # /[inserted by cython to avoid comment start]* MPLS *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_MPLS_MCAST = 0x8848 # /[inserted by cython to avoid comment start]* MPLS Multicast *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOEDISC = 0x8863 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Discovery Stage *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_PPPOE = 0x8864 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Session Stage *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_LOOPBACK = 0x9000 # /[inserted by cython to avoid comment start]* used to test interfaces *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_PPPOEDISC, __pyx_int_34915) < 0) __PYX_ERR(0, 98, __pyx_L1_error) + + /* "dnet.pyx":99 + * ETH_TYPE_MPLS_MCAST = 0x8848 # /[inserted by cython to avoid comment start]* MPLS Multicast *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOEDISC = 0x8863 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Discovery Stage *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOE = 0x8864 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Session Stage *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ETH_TYPE_LOOPBACK = 0x9000 # /[inserted by cython to avoid comment start]* used to test interfaces *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_PPPOE, __pyx_int_34916) < 0) __PYX_ERR(0, 99, __pyx_L1_error) + + /* "dnet.pyx":100 + * ETH_TYPE_PPPOEDISC = 0x8863 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Discovery Stage *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_PPPOE = 0x8864 # /[inserted by cython to avoid comment start]* PPP Over Ethernet Session Stage *[inserted by cython to avoid comment closer]/ + * ETH_TYPE_LOOPBACK = 0x9000 # /[inserted by cython to avoid comment start]* used to test interfaces *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * ETH_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00", 6) + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_TYPE_LOOPBACK, __pyx_int_36864) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + + /* "dnet.pyx":102 + * ETH_TYPE_LOOPBACK = 0x9000 # /[inserted by cython to avoid comment start]* used to test interfaces *[inserted by cython to avoid comment closer]/ + * + * ETH_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00", 6) # <<<<<<<<<<<<<< + * ETH_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff\xff\xff", 6) + * + */ + __pyx_t_1 = PyBytes_FromStringAndSize(((char *)"\000\000\000\000\000\000"), 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_ADDR_UNSPEC, __pyx_t_1) < 0) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":103 + * + * ETH_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00", 6) + * ETH_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff\xff\xff", 6) # <<<<<<<<<<<<<< + * + * cdef class eth: + */ + __pyx_t_1 = PyBytes_FromStringAndSize(((char *)"\377\377\377\377\377\377"), 6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ETH_ADDR_BROADCAST, __pyx_t_1) < 0) __PYX_ERR(0, 103, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":150 + * eth_close(self.eth) + * + * def eth_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from 6-byte packed binary string to + * a printable string ('00:de:ad:be:ef:00').""" + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4dnet_3eth_ntoa, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_eth_ntoa, __pyx_t_1) < 0) __PYX_ERR(0, 150, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":157 + * return __eth_ntoa(&ea) + * + * def eth_aton(buf): # <<<<<<<<<<<<<< + * """Convert an Ethernet MAC address from a printable string to a + * packed binary string ('\\x00\\xde\\xad\\xbe\\xef\\x00').""" + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4dnet_5eth_aton, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_eth_aton, __pyx_t_1) < 0) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":165 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, # <<<<<<<<<<<<<< + * etype=ETH_TYPE_IP): + * """Return a packed binary string representing an Ethernet header. + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ETH_ADDR_BROADCAST); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_k__3 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ETH_ADDR_BROADCAST); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_k__4 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":166 + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, + * etype=ETH_TYPE_IP): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an Ethernet header. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ETH_TYPE_IP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_k__5 = __pyx_t_1; + __Pyx_GIVEREF(__pyx_t_1); + __pyx_t_1 = 0; + + /* "dnet.pyx":165 + * return PyBytes_FromStringAndSize(ea.data, 6) + * + * def eth_pack_hdr(dst=ETH_ADDR_BROADCAST, src=ETH_ADDR_BROADCAST, # <<<<<<<<<<<<<< + * etype=ETH_TYPE_IP): + * """Return a packed binary string representing an Ethernet header. + */ + __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4dnet_7eth_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_eth_pack_hdr, __pyx_t_1) < 0) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dnet.pyx":202 + * int off, int ttl, int p, ip_addr_t s, ip_addr_t d) + * + * IP_ADDR_LEN = 4 # /[inserted by cython to avoid comment start]* IP address length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_ADDR_BITS = 32 # /[inserted by cython to avoid comment start]* IP address bits *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_LEN, __pyx_int_4) < 0) __PYX_ERR(0, 202, __pyx_L1_error) + + /* "dnet.pyx":203 + * + * IP_ADDR_LEN = 4 # /[inserted by cython to avoid comment start]* IP address length *[inserted by cython to avoid comment closer]/ + * IP_ADDR_BITS = 32 # /[inserted by cython to avoid comment start]* IP address bits *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base IP header length *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_BITS, __pyx_int_32) < 0) __PYX_ERR(0, 203, __pyx_L1_error) + + /* "dnet.pyx":205 + * IP_ADDR_BITS = 32 # /[inserted by cython to avoid comment start]* IP address bits *[inserted by cython to avoid comment closer]/ + * + * IP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base IP header length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_OPT_LEN = 2 # /[inserted by cython to avoid comment start]* base IP option length *[inserted by cython to avoid comment closer]/ + * IP_OPT_LEN_MAX =40 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_HDR_LEN, __pyx_int_20) < 0) __PYX_ERR(0, 205, __pyx_L1_error) + + /* "dnet.pyx":206 + * + * IP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base IP header length *[inserted by cython to avoid comment closer]/ + * IP_OPT_LEN = 2 # /[inserted by cython to avoid comment start]* base IP option length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_OPT_LEN_MAX =40 + * IP_HDR_LEN_MAX =(IP_HDR_LEN + IP_OPT_LEN_MAX) + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_OPT_LEN, __pyx_int_2) < 0) __PYX_ERR(0, 206, __pyx_L1_error) + + /* "dnet.pyx":207 + * IP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base IP header length *[inserted by cython to avoid comment closer]/ + * IP_OPT_LEN = 2 # /[inserted by cython to avoid comment start]* base IP option length *[inserted by cython to avoid comment closer]/ + * IP_OPT_LEN_MAX =40 # <<<<<<<<<<<<<< + * IP_HDR_LEN_MAX =(IP_HDR_LEN + IP_OPT_LEN_MAX) + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_OPT_LEN_MAX, __pyx_int_40) < 0) __PYX_ERR(0, 207, __pyx_L1_error) + + /* "dnet.pyx":208 + * IP_OPT_LEN = 2 # /[inserted by cython to avoid comment start]* base IP option length *[inserted by cython to avoid comment closer]/ + * IP_OPT_LEN_MAX =40 + * IP_HDR_LEN_MAX =(IP_HDR_LEN + IP_OPT_LEN_MAX) # <<<<<<<<<<<<<< + * + * IP_LEN_MAX = 65535 + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_IP_HDR_LEN); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_IP_OPT_LEN_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_HDR_LEN_MAX, __pyx_t_3) < 0) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":210 + * IP_HDR_LEN_MAX =(IP_HDR_LEN + IP_OPT_LEN_MAX) + * + * IP_LEN_MAX = 65535 # <<<<<<<<<<<<<< + * IP_LEN_MIN = IP_HDR_LEN + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_LEN_MAX, __pyx_int_65535) < 0) __PYX_ERR(0, 210, __pyx_L1_error) + + /* "dnet.pyx":211 + * + * IP_LEN_MAX = 65535 + * IP_LEN_MIN = IP_HDR_LEN # <<<<<<<<<<<<<< + * + * IP_TOS_DEFAULT =0x00 # /[inserted by cython to avoid comment start]* default *[inserted by cython to avoid comment closer]/ + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_HDR_LEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_LEN_MIN, __pyx_t_3) < 0) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":213 + * IP_LEN_MIN = IP_HDR_LEN + * + * IP_TOS_DEFAULT =0x00 # /[inserted by cython to avoid comment start]* default *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP_RF = 0x8000 # /[inserted by cython to avoid comment start]* reserved *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_TOS_DEFAULT, __pyx_int_0) < 0) __PYX_ERR(0, 213, __pyx_L1_error) + + /* "dnet.pyx":215 + * IP_TOS_DEFAULT =0x00 # /[inserted by cython to avoid comment start]* default *[inserted by cython to avoid comment closer]/ + * + * IP_RF = 0x8000 # /[inserted by cython to avoid comment start]* reserved *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_DF = 0x4000 # /[inserted by cython to avoid comment start]* don't fragment *[inserted by cython to avoid comment closer]/ + * IP_MF = 0x2000 # /[inserted by cython to avoid comment start]* more fragments (not last frag) *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_RF, __pyx_int_32768) < 0) __PYX_ERR(0, 215, __pyx_L1_error) + + /* "dnet.pyx":216 + * + * IP_RF = 0x8000 # /[inserted by cython to avoid comment start]* reserved *[inserted by cython to avoid comment closer]/ + * IP_DF = 0x4000 # /[inserted by cython to avoid comment start]* don't fragment *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_MF = 0x2000 # /[inserted by cython to avoid comment start]* more fragments (not last frag) *[inserted by cython to avoid comment closer]/ + * IP_OFFMASK = 0x1fff # /[inserted by cython to avoid comment start]* mask for fragment offset *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_DF, __pyx_int_16384) < 0) __PYX_ERR(0, 216, __pyx_L1_error) + + /* "dnet.pyx":217 + * IP_RF = 0x8000 # /[inserted by cython to avoid comment start]* reserved *[inserted by cython to avoid comment closer]/ + * IP_DF = 0x4000 # /[inserted by cython to avoid comment start]* don't fragment *[inserted by cython to avoid comment closer]/ + * IP_MF = 0x2000 # /[inserted by cython to avoid comment start]* more fragments (not last frag) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_OFFMASK = 0x1fff # /[inserted by cython to avoid comment start]* mask for fragment offset *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_MF, __pyx_int_8192) < 0) __PYX_ERR(0, 217, __pyx_L1_error) + + /* "dnet.pyx":218 + * IP_DF = 0x4000 # /[inserted by cython to avoid comment start]* don't fragment *[inserted by cython to avoid comment closer]/ + * IP_MF = 0x2000 # /[inserted by cython to avoid comment start]* more fragments (not last frag) *[inserted by cython to avoid comment closer]/ + * IP_OFFMASK = 0x1fff # /[inserted by cython to avoid comment start]* mask for fragment offset *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP_TTL_DEFAULT =64 # /[inserted by cython to avoid comment start]* default ttl, RFC 1122, RFC 1340 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_OFFMASK, __pyx_int_8191) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + + /* "dnet.pyx":220 + * IP_OFFMASK = 0x1fff # /[inserted by cython to avoid comment start]* mask for fragment offset *[inserted by cython to avoid comment closer]/ + * + * IP_TTL_DEFAULT =64 # /[inserted by cython to avoid comment start]* default ttl, RFC 1122, RFC 1340 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_TTL_MAX = 255 # /[inserted by cython to avoid comment start]* maximum ttl *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_TTL_DEFAULT, __pyx_int_64) < 0) __PYX_ERR(0, 220, __pyx_L1_error) + + /* "dnet.pyx":221 + * + * IP_TTL_DEFAULT =64 # /[inserted by cython to avoid comment start]* default ttl, RFC 1122, RFC 1340 *[inserted by cython to avoid comment closer]/ + * IP_TTL_MAX = 255 # /[inserted by cython to avoid comment start]* maximum ttl *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP_PROTO_IP = 0 # /[inserted by cython to avoid comment start]* dummy for IP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_TTL_MAX, __pyx_int_255) < 0) __PYX_ERR(0, 221, __pyx_L1_error) + + /* "dnet.pyx":223 + * IP_TTL_MAX = 255 # /[inserted by cython to avoid comment start]* maximum ttl *[inserted by cython to avoid comment closer]/ + * + * IP_PROTO_IP = 0 # /[inserted by cython to avoid comment start]* dummy for IP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_ICMP = 1 # /[inserted by cython to avoid comment start]* ICMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IGMP = 2 # /[inserted by cython to avoid comment start]* IGMP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_IP, __pyx_int_0) < 0) __PYX_ERR(0, 223, __pyx_L1_error) + + /* "dnet.pyx":224 + * + * IP_PROTO_IP = 0 # /[inserted by cython to avoid comment start]* dummy for IP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ICMP = 1 # /[inserted by cython to avoid comment start]* ICMP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_IGMP = 2 # /[inserted by cython to avoid comment start]* IGMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_TCP = 6 # /[inserted by cython to avoid comment start]* TCP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_ICMP, __pyx_int_1) < 0) __PYX_ERR(0, 224, __pyx_L1_error) + + /* "dnet.pyx":225 + * IP_PROTO_IP = 0 # /[inserted by cython to avoid comment start]* dummy for IP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ICMP = 1 # /[inserted by cython to avoid comment start]* ICMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IGMP = 2 # /[inserted by cython to avoid comment start]* IGMP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_TCP = 6 # /[inserted by cython to avoid comment start]* TCP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_UDP = 17 # /[inserted by cython to avoid comment start]* UDP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_IGMP, __pyx_int_2) < 0) __PYX_ERR(0, 225, __pyx_L1_error) + + /* "dnet.pyx":226 + * IP_PROTO_ICMP = 1 # /[inserted by cython to avoid comment start]* ICMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IGMP = 2 # /[inserted by cython to avoid comment start]* IGMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_TCP = 6 # /[inserted by cython to avoid comment start]* TCP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_UDP = 17 # /[inserted by cython to avoid comment start]* UDP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IPV6 = 41 # /[inserted by cython to avoid comment start]* IPv6 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_TCP, __pyx_int_6) < 0) __PYX_ERR(0, 226, __pyx_L1_error) + + /* "dnet.pyx":227 + * IP_PROTO_IGMP = 2 # /[inserted by cython to avoid comment start]* IGMP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_TCP = 6 # /[inserted by cython to avoid comment start]* TCP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_UDP = 17 # /[inserted by cython to avoid comment start]* UDP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_IPV6 = 41 # /[inserted by cython to avoid comment start]* IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_GRE = 47 # /[inserted by cython to avoid comment start]* General Routing Encap *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_UDP, __pyx_int_17) < 0) __PYX_ERR(0, 227, __pyx_L1_error) + + /* "dnet.pyx":228 + * IP_PROTO_TCP = 6 # /[inserted by cython to avoid comment start]* TCP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_UDP = 17 # /[inserted by cython to avoid comment start]* UDP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IPV6 = 41 # /[inserted by cython to avoid comment start]* IPv6 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_GRE = 47 # /[inserted by cython to avoid comment start]* General Routing Encap *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ESP = 50 # /[inserted by cython to avoid comment start]* Encap Security Payload *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_IPV6, __pyx_int_41) < 0) __PYX_ERR(0, 228, __pyx_L1_error) + + /* "dnet.pyx":229 + * IP_PROTO_UDP = 17 # /[inserted by cython to avoid comment start]* UDP *[inserted by cython to avoid comment closer]/ + * IP_PROTO_IPV6 = 41 # /[inserted by cython to avoid comment start]* IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_GRE = 47 # /[inserted by cython to avoid comment start]* General Routing Encap *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_ESP = 50 # /[inserted by cython to avoid comment start]* Encap Security Payload *[inserted by cython to avoid comment closer]/ + * IP_PROTO_AH = 51 # /[inserted by cython to avoid comment start]* Authentication Header *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_GRE, __pyx_int_47) < 0) __PYX_ERR(0, 229, __pyx_L1_error) + + /* "dnet.pyx":230 + * IP_PROTO_IPV6 = 41 # /[inserted by cython to avoid comment start]* IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_GRE = 47 # /[inserted by cython to avoid comment start]* General Routing Encap *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ESP = 50 # /[inserted by cython to avoid comment start]* Encap Security Payload *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_AH = 51 # /[inserted by cython to avoid comment start]* Authentication Header *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ICMPV6 = 58 # /[inserted by cython to avoid comment start]* ICMP for IPv6 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_ESP, __pyx_int_50) < 0) __PYX_ERR(0, 230, __pyx_L1_error) + + /* "dnet.pyx":231 + * IP_PROTO_GRE = 47 # /[inserted by cython to avoid comment start]* General Routing Encap *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ESP = 50 # /[inserted by cython to avoid comment start]* Encap Security Payload *[inserted by cython to avoid comment closer]/ + * IP_PROTO_AH = 51 # /[inserted by cython to avoid comment start]* Authentication Header *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_ICMPV6 = 58 # /[inserted by cython to avoid comment start]* ICMP for IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RAW = 255 # /[inserted by cython to avoid comment start]* Raw IP packets *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_AH, __pyx_int_51) < 0) __PYX_ERR(0, 231, __pyx_L1_error) + + /* "dnet.pyx":232 + * IP_PROTO_ESP = 50 # /[inserted by cython to avoid comment start]* Encap Security Payload *[inserted by cython to avoid comment closer]/ + * IP_PROTO_AH = 51 # /[inserted by cython to avoid comment start]* Authentication Header *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ICMPV6 = 58 # /[inserted by cython to avoid comment start]* ICMP for IPv6 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_RAW = 255 # /[inserted by cython to avoid comment start]* Raw IP packets *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RESERVED = IP_PROTO_RAW # /[inserted by cython to avoid comment start]* Reserved *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_ICMPV6, __pyx_int_58) < 0) __PYX_ERR(0, 232, __pyx_L1_error) + + /* "dnet.pyx":233 + * IP_PROTO_AH = 51 # /[inserted by cython to avoid comment start]* Authentication Header *[inserted by cython to avoid comment closer]/ + * IP_PROTO_ICMPV6 = 58 # /[inserted by cython to avoid comment start]* ICMP for IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RAW = 255 # /[inserted by cython to avoid comment start]* Raw IP packets *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_RESERVED = IP_PROTO_RAW # /[inserted by cython to avoid comment start]* Reserved *[inserted by cython to avoid comment closer]/ + * IP_PROTO_MAX = 255 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_RAW, __pyx_int_255) < 0) __PYX_ERR(0, 233, __pyx_L1_error) + + /* "dnet.pyx":234 + * IP_PROTO_ICMPV6 = 58 # /[inserted by cython to avoid comment start]* ICMP for IPv6 *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RAW = 255 # /[inserted by cython to avoid comment start]* Raw IP packets *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RESERVED = IP_PROTO_RAW # /[inserted by cython to avoid comment start]* Reserved *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP_PROTO_MAX = 255 + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_PROTO_RAW); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_RESERVED, __pyx_t_3) < 0) __PYX_ERR(0, 234, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":235 + * IP_PROTO_RAW = 255 # /[inserted by cython to avoid comment start]* Raw IP packets *[inserted by cython to avoid comment closer]/ + * IP_PROTO_RESERVED = IP_PROTO_RAW # /[inserted by cython to avoid comment start]* Reserved *[inserted by cython to avoid comment closer]/ + * IP_PROTO_MAX = 255 # <<<<<<<<<<<<<< + * + * IP_ADDR_ANY = PyBytes_FromStringAndSize("\x00\x00\x00\x00", 4) + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_PROTO_MAX, __pyx_int_255) < 0) __PYX_ERR(0, 235, __pyx_L1_error) + + /* "dnet.pyx":237 + * IP_PROTO_MAX = 255 + * + * IP_ADDR_ANY = PyBytes_FromStringAndSize("\x00\x00\x00\x00", 4) # <<<<<<<<<<<<<< + * IP_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff", 4) + * IP_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x7f\x00\x00\x01", 4) + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\000\000\000\000"), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_ANY, __pyx_t_3) < 0) __PYX_ERR(0, 237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":238 + * + * IP_ADDR_ANY = PyBytes_FromStringAndSize("\x00\x00\x00\x00", 4) + * IP_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff", 4) # <<<<<<<<<<<<<< + * IP_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x7f\x00\x00\x01", 4) + * IP_ADDR_MCAST_ALL = PyBytes_FromStringAndSize("\xe0\x00\x00\x01", 4) + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\377\377\377\377"), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_BROADCAST, __pyx_t_3) < 0) __PYX_ERR(0, 238, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":239 + * IP_ADDR_ANY = PyBytes_FromStringAndSize("\x00\x00\x00\x00", 4) + * IP_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff", 4) + * IP_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x7f\x00\x00\x01", 4) # <<<<<<<<<<<<<< + * IP_ADDR_MCAST_ALL = PyBytes_FromStringAndSize("\xe0\x00\x00\x01", 4) + * IP_ADDR_MCAST_LOCAL = PyBytes_FromStringAndSize("\xe0\x00\x00\xff", 4) + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\000\000\001"), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_LOOPBACK, __pyx_t_3) < 0) __PYX_ERR(0, 239, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":240 + * IP_ADDR_BROADCAST = PyBytes_FromStringAndSize("\xff\xff\xff\xff", 4) + * IP_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x7f\x00\x00\x01", 4) + * IP_ADDR_MCAST_ALL = PyBytes_FromStringAndSize("\xe0\x00\x00\x01", 4) # <<<<<<<<<<<<<< + * IP_ADDR_MCAST_LOCAL = PyBytes_FromStringAndSize("\xe0\x00\x00\xff", 4) + * + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\340\000\000\001"), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_MCAST_ALL, __pyx_t_3) < 0) __PYX_ERR(0, 240, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":241 + * IP_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x7f\x00\x00\x01", 4) + * IP_ADDR_MCAST_ALL = PyBytes_FromStringAndSize("\xe0\x00\x00\x01", 4) + * IP_ADDR_MCAST_LOCAL = PyBytes_FromStringAndSize("\xe0\x00\x00\xff", 4) # <<<<<<<<<<<<<< + * + * cdef class ip: + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\340\000\000\377"), 4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP_ADDR_MCAST_LOCAL, __pyx_t_3) < 0) __PYX_ERR(0, 241, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":268 + * ip_close(self.ip) + * + * def ip_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a 4-byte packed binary string or + * integer to a printable string ('10.0.0.1').""" + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_9ip_ntoa, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_ntoa, __pyx_t_3) < 0) __PYX_ERR(0, 268, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":281 + * return __ip_ntoa(&ia) + * + * def ip_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IP address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_11ip_aton, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_aton, __pyx_t_3) < 0) __PYX_ERR(0, 281, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":289 + * return PyBytes_FromStringAndSize(&ia, 4) + * + * def ip_checksum(pkt): # <<<<<<<<<<<<<< + * """Return packed binary string representing an IP packet + * with the IP and transport-layer checksums set. + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_13ip_checksum, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 289, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_checksum, __pyx_t_3) < 0) __PYX_ERR(0, 289, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":312 + * raise TypeError + * + * def ip_cksum_add(buf, int sum): # <<<<<<<<<<<<<< + * cdef char *p + * cdef int n + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_15ip_cksum_add, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_cksum_add, __pyx_t_3) < 0) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":320 + * raise TypeError + * + * def ip_cksum_carry(int sum): # <<<<<<<<<<<<<< + * return __ip_cksum_carry(sum) + * + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_17ip_cksum_carry, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_cksum_carry, __pyx_t_3) < 0) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":323 + * return __ip_cksum_carry(sum) + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, # <<<<<<<<<<<<<< + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_TOS_DEFAULT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__8 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_HDR_LEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__9 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":324 + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, # <<<<<<<<<<<<<< + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + * """Return a packed binary string representing an IP header. + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_TTL_DEFAULT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__10 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_PROTO_IP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__11 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":325 + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IP header. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_ADDR_ANY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__12 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_ADDR_ANY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__13 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":323 + * return __ip_cksum_carry(sum) + * + * def ip_pack_hdr(tos=IP_TOS_DEFAULT, len=IP_HDR_LEN, id=0, off=0, # <<<<<<<<<<<<<< + * ttl=IP_TTL_DEFAULT, p=IP_PROTO_IP, + * src=IP_ADDR_ANY, dst=IP_ADDR_ANY): + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_19ip_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip_pack_hdr, __pyx_t_3) < 0) __PYX_ERR(0, 323, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":358 + * int nxt, int hlim, ip6_addr_t s, ip6_addr_t d) + * + * IP6_ADDR_LEN = 16 # <<<<<<<<<<<<<< + * IP6_ADDR_BITS = 128 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_ADDR_LEN, __pyx_int_16) < 0) __PYX_ERR(0, 358, __pyx_L1_error) + + /* "dnet.pyx":359 + * + * IP6_ADDR_LEN = 16 + * IP6_ADDR_BITS = 128 # <<<<<<<<<<<<<< + * + * IP6_HDR_LEN = 40 # /[inserted by cython to avoid comment start]* IPv6 header length *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_ADDR_BITS, __pyx_int_128) < 0) __PYX_ERR(0, 359, __pyx_L1_error) + + /* "dnet.pyx":361 + * IP6_ADDR_BITS = 128 + * + * IP6_HDR_LEN = 40 # /[inserted by cython to avoid comment start]* IPv6 header length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * IP6_LEN_MIN = IP6_HDR_LEN + * IP6_LEN_MAX = 65535 # /[inserted by cython to avoid comment start]* non-jumbo payload *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_HDR_LEN, __pyx_int_40) < 0) __PYX_ERR(0, 361, __pyx_L1_error) + + /* "dnet.pyx":362 + * + * IP6_HDR_LEN = 40 # /[inserted by cython to avoid comment start]* IPv6 header length *[inserted by cython to avoid comment closer]/ + * IP6_LEN_MIN = IP6_HDR_LEN # <<<<<<<<<<<<<< + * IP6_LEN_MAX = 65535 # /[inserted by cython to avoid comment start]* non-jumbo payload *[inserted by cython to avoid comment closer]/ + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP6_HDR_LEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_LEN_MIN, __pyx_t_3) < 0) __PYX_ERR(0, 362, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":363 + * IP6_HDR_LEN = 40 # /[inserted by cython to avoid comment start]* IPv6 header length *[inserted by cython to avoid comment closer]/ + * IP6_LEN_MIN = IP6_HDR_LEN + * IP6_LEN_MAX = 65535 # /[inserted by cython to avoid comment start]* non-jumbo payload *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP6_MTU_MIN = 1280 # /[inserted by cython to avoid comment start]* minimum MTU (1024 + 256) *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_LEN_MAX, __pyx_int_65535) < 0) __PYX_ERR(0, 363, __pyx_L1_error) + + /* "dnet.pyx":365 + * IP6_LEN_MAX = 65535 # /[inserted by cython to avoid comment start]* non-jumbo payload *[inserted by cython to avoid comment closer]/ + * + * IP6_MTU_MIN = 1280 # /[inserted by cython to avoid comment start]* minimum MTU (1024 + 256) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * IP6_HLIM_DEFAULT=64 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_MTU_MIN, __pyx_int_1280) < 0) __PYX_ERR(0, 365, __pyx_L1_error) + + /* "dnet.pyx":367 + * IP6_MTU_MIN = 1280 # /[inserted by cython to avoid comment start]* minimum MTU (1024 + 256) *[inserted by cython to avoid comment closer]/ + * + * IP6_HLIM_DEFAULT=64 # <<<<<<<<<<<<<< + * IP6_HLIM_MAX = 255 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_HLIM_DEFAULT, __pyx_int_64) < 0) __PYX_ERR(0, 367, __pyx_L1_error) + + /* "dnet.pyx":368 + * + * IP6_HLIM_DEFAULT=64 + * IP6_HLIM_MAX = 255 # <<<<<<<<<<<<<< + * + * IP6_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_HLIM_MAX, __pyx_int_255) < 0) __PYX_ERR(0, 368, __pyx_L1_error) + + /* "dnet.pyx":370 + * IP6_HLIM_MAX = 255 + * + * IP6_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) # <<<<<<<<<<<<<< + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) + * + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"), 16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_ADDR_UNSPEC, __pyx_t_3) < 0) __PYX_ERR(0, 370, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":371 + * + * IP6_ADDR_UNSPEC = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 16) + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) # <<<<<<<<<<<<<< + * + * def ip6_ntoa(buf): + */ + __pyx_t_3 = PyBytes_FromStringAndSize(((char *)"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"), 16); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 371, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_IP6_ADDR_LOOPBACK, __pyx_t_3) < 0) __PYX_ERR(0, 371, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":373 + * IP6_ADDR_LOOPBACK = PyBytes_FromStringAndSize("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", 16) + * + * def ip6_ntoa(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a 16-byte packed binary string to a + * printable string ('10.0.0.1').""" + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_21ip6_ntoa, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip6_ntoa, __pyx_t_3) < 0) __PYX_ERR(0, 373, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":380 + * return __ip6_ntoa(&ia) + * + * def ip6_aton(buf): # <<<<<<<<<<<<<< + * """Convert an IPv6 address from a printable string to a + * packed binary string ('\\x0a\\x00\\x00\\x01').""" + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_23ip6_aton, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip6_aton, __pyx_t_3) < 0) __PYX_ERR(0, 380, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":388 + * return PyBytes_FromStringAndSize(&ia, 16) + * + * def ip6_checksum(buf): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IPv6 packet + * with the IPv6 and transport-layer checksums set. + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_25ip6_checksum, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip6_checksum, __pyx_t_3) < 0) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":398 + * return buf + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, # <<<<<<<<<<<<<< + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): + * """Return a packed binary string representing an IPv6 header. + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_PROTO_IPV6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__14 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP6_HLIM_DEFAULT); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__15 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":399 + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an IPv6 header. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP6_ADDR_UNSPEC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__16 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP6_ADDR_UNSPEC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__17 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":398 + * return buf + * + * def ip6_pack_hdr(fc=0, fl=0, plen=0, nxt=IP_PROTO_IPV6, hlim=IP6_HLIM_DEFAULT, # <<<<<<<<<<<<<< + * src=IP6_ADDR_UNSPEC, dst=IP6_ADDR_UNSPEC): + * """Return a packed binary string representing an IPv6 header. + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_27ip6_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ip6_pack_hdr, __pyx_t_3) < 0) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":434 + * int addr_aton(char *src, addr_t *dst) + * + * ADDR_TYPE_NONE = 0 # <<<<<<<<<<<<<< + * ADDR_TYPE_ETH = 1 + * ADDR_TYPE_IP = 2 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADDR_TYPE_NONE, __pyx_int_0) < 0) __PYX_ERR(0, 434, __pyx_L1_error) + + /* "dnet.pyx":435 + * + * ADDR_TYPE_NONE = 0 + * ADDR_TYPE_ETH = 1 # <<<<<<<<<<<<<< + * ADDR_TYPE_IP = 2 + * ADDR_TYPE_IP6 = 3 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADDR_TYPE_ETH, __pyx_int_1) < 0) __PYX_ERR(0, 435, __pyx_L1_error) + + /* "dnet.pyx":436 + * ADDR_TYPE_NONE = 0 + * ADDR_TYPE_ETH = 1 + * ADDR_TYPE_IP = 2 # <<<<<<<<<<<<<< + * ADDR_TYPE_IP6 = 3 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADDR_TYPE_IP, __pyx_int_2) < 0) __PYX_ERR(0, 436, __pyx_L1_error) + + /* "dnet.pyx":437 + * ADDR_TYPE_ETH = 1 + * ADDR_TYPE_IP = 2 + * ADDR_TYPE_IP6 = 3 # <<<<<<<<<<<<<< + * + * cdef class addr: + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ADDR_TYPE_IP6, __pyx_int_3) < 0) __PYX_ERR(0, 437, __pyx_L1_error) + + /* "dnet.pyx":447 + * cdef addr_t _addr + * + * def __init__(self, addrtxt=None, addrtype=ADDR_TYPE_NONE): # <<<<<<<<<<<<<< + * if addrtxt != None and addr_aton(addrtxt, &self._addr) < 0: + * if PyBytes_Size(addrtxt) == 4: + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ADDR_TYPE_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__18 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":678 + * eth_addr_t dha, ip_addr_t dpa) + * + * ARP_HDR_LEN = 8 # /[inserted by cython to avoid comment start]* base ARP header length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ARP_ETHIP_LEN = 20 # /[inserted by cython to avoid comment start]* base ARP message length *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_HDR_LEN, __pyx_int_8) < 0) __PYX_ERR(0, 678, __pyx_L1_error) + + /* "dnet.pyx":679 + * + * ARP_HDR_LEN = 8 # /[inserted by cython to avoid comment start]* base ARP header length *[inserted by cython to avoid comment closer]/ + * ARP_ETHIP_LEN = 20 # /[inserted by cython to avoid comment start]* base ARP message length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * ARP_HRD_ETH = 0x0001 # /[inserted by cython to avoid comment start]* ethernet hardware *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_ETHIP_LEN, __pyx_int_20) < 0) __PYX_ERR(0, 679, __pyx_L1_error) + + /* "dnet.pyx":681 + * ARP_ETHIP_LEN = 20 # /[inserted by cython to avoid comment start]* base ARP message length *[inserted by cython to avoid comment closer]/ + * + * ARP_HRD_ETH = 0x0001 # /[inserted by cython to avoid comment start]* ethernet hardware *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ARP_HRD_IEEE802=0x0006 # /[inserted by cython to avoid comment start]* IEEE 802 hardware *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_HRD_ETH, __pyx_int_1) < 0) __PYX_ERR(0, 681, __pyx_L1_error) + + /* "dnet.pyx":682 + * + * ARP_HRD_ETH = 0x0001 # /[inserted by cython to avoid comment start]* ethernet hardware *[inserted by cython to avoid comment closer]/ + * ARP_HRD_IEEE802=0x0006 # /[inserted by cython to avoid comment start]* IEEE 802 hardware *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * ARP_PRO_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_HRD_IEEE802, __pyx_int_6) < 0) __PYX_ERR(0, 682, __pyx_L1_error) + + /* "dnet.pyx":684 + * ARP_HRD_IEEE802=0x0006 # /[inserted by cython to avoid comment start]* IEEE 802 hardware *[inserted by cython to avoid comment closer]/ + * + * ARP_PRO_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * ARP_OP_REQUEST = 1 # /[inserted by cython to avoid comment start]* request to resolve ha given pa *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_PRO_IP, __pyx_int_2048) < 0) __PYX_ERR(0, 684, __pyx_L1_error) + + /* "dnet.pyx":686 + * ARP_PRO_IP = 0x0800 # /[inserted by cython to avoid comment start]* IP protocol *[inserted by cython to avoid comment closer]/ + * + * ARP_OP_REQUEST = 1 # /[inserted by cython to avoid comment start]* request to resolve ha given pa *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ARP_OP_REPLY = 2 # /[inserted by cython to avoid comment start]* response giving hardware address *[inserted by cython to avoid comment closer]/ + * ARP_OP_REVREQUEST = 3 # /[inserted by cython to avoid comment start]* request to resolve pa given ha *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_OP_REQUEST, __pyx_int_1) < 0) __PYX_ERR(0, 686, __pyx_L1_error) + + /* "dnet.pyx":687 + * + * ARP_OP_REQUEST = 1 # /[inserted by cython to avoid comment start]* request to resolve ha given pa *[inserted by cython to avoid comment closer]/ + * ARP_OP_REPLY = 2 # /[inserted by cython to avoid comment start]* response giving hardware address *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ARP_OP_REVREQUEST = 3 # /[inserted by cython to avoid comment start]* request to resolve pa given ha *[inserted by cython to avoid comment closer]/ + * ARP_OP_REVREPLY = 4 # /[inserted by cython to avoid comment start]* response giving protocol address *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_OP_REPLY, __pyx_int_2) < 0) __PYX_ERR(0, 687, __pyx_L1_error) + + /* "dnet.pyx":688 + * ARP_OP_REQUEST = 1 # /[inserted by cython to avoid comment start]* request to resolve ha given pa *[inserted by cython to avoid comment closer]/ + * ARP_OP_REPLY = 2 # /[inserted by cython to avoid comment start]* response giving hardware address *[inserted by cython to avoid comment closer]/ + * ARP_OP_REVREQUEST = 3 # /[inserted by cython to avoid comment start]* request to resolve pa given ha *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * ARP_OP_REVREPLY = 4 # /[inserted by cython to avoid comment start]* response giving protocol address *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_OP_REVREQUEST, __pyx_int_3) < 0) __PYX_ERR(0, 688, __pyx_L1_error) + + /* "dnet.pyx":689 + * ARP_OP_REPLY = 2 # /[inserted by cython to avoid comment start]* response giving hardware address *[inserted by cython to avoid comment closer]/ + * ARP_OP_REVREQUEST = 3 # /[inserted by cython to avoid comment start]* request to resolve pa given ha *[inserted by cython to avoid comment closer]/ + * ARP_OP_REVREPLY = 4 # /[inserted by cython to avoid comment start]* response giving protocol address *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * cdef int __arp_callback(arp_entry *entry, void *arg) except -1: + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ARP_OP_REVREPLY, __pyx_int_4) < 0) __PYX_ERR(0, 689, __pyx_L1_error) + + /* "dnet.pyx":772 + * arp_close(self.arp) + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, # <<<<<<<<<<<<<< + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ARP_OP_REQUEST); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__23 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":773 + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, # <<<<<<<<<<<<<< + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + * """Return a packed binary string representing an Ethernet/IP ARP message. + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ETH_ADDR_UNSPEC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__24 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_ADDR_ANY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__25 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":774 + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an Ethernet/IP ARP message. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ETH_ADDR_UNSPEC); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__26 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_IP_ADDR_ANY); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__27 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":772 + * arp_close(self.arp) + * + * def arp_pack_hdr_ethip(op=ARP_OP_REQUEST, # <<<<<<<<<<<<<< + * sha=ETH_ADDR_UNSPEC, spa=IP_ADDR_ANY, + * dha=ETH_ADDR_UNSPEC, dpa=IP_ADDR_ANY): + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_29arp_pack_hdr_ethip, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_arp_pack_hdr_ethip, __pyx_t_3) < 0) __PYX_ERR(0, 772, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":800 + * void __icmp_pack_hdr "icmp_pack_hdr" (char *hdr, int type, int code) + * + * def icmp_pack_hdr(itype, code): # <<<<<<<<<<<<<< + * """Return a packed binary string representing an ICMP header. + * + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_31icmp_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 800, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_icmp_pack_hdr, __pyx_t_3) < 0) __PYX_ERR(0, 800, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":818 + * int sport, int dport, unsigned long seq, unsigned long ack, int flags, int win, int urp) + * + * TCP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base TCP header length *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * TH_FIN = 0x01 # /[inserted by cython to avoid comment start]* end of data *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_HDR_LEN, __pyx_int_20) < 0) __PYX_ERR(0, 818, __pyx_L1_error) + + /* "dnet.pyx":820 + * TCP_HDR_LEN = 20 # /[inserted by cython to avoid comment start]* base TCP header length *[inserted by cython to avoid comment closer]/ + * + * TH_FIN = 0x01 # /[inserted by cython to avoid comment start]* end of data *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_SYN = 0x02 # /[inserted by cython to avoid comment start]* synchronize sequence numbers *[inserted by cython to avoid comment closer]/ + * TH_RST = 0x04 # /[inserted by cython to avoid comment start]* reset connection *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_FIN, __pyx_int_1) < 0) __PYX_ERR(0, 820, __pyx_L1_error) + + /* "dnet.pyx":821 + * + * TH_FIN = 0x01 # /[inserted by cython to avoid comment start]* end of data *[inserted by cython to avoid comment closer]/ + * TH_SYN = 0x02 # /[inserted by cython to avoid comment start]* synchronize sequence numbers *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_RST = 0x04 # /[inserted by cython to avoid comment start]* reset connection *[inserted by cython to avoid comment closer]/ + * TH_PUSH = 0x08 # /[inserted by cython to avoid comment start]* push *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_SYN, __pyx_int_2) < 0) __PYX_ERR(0, 821, __pyx_L1_error) + + /* "dnet.pyx":822 + * TH_FIN = 0x01 # /[inserted by cython to avoid comment start]* end of data *[inserted by cython to avoid comment closer]/ + * TH_SYN = 0x02 # /[inserted by cython to avoid comment start]* synchronize sequence numbers *[inserted by cython to avoid comment closer]/ + * TH_RST = 0x04 # /[inserted by cython to avoid comment start]* reset connection *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_PUSH = 0x08 # /[inserted by cython to avoid comment start]* push *[inserted by cython to avoid comment closer]/ + * TH_ACK = 0x10 # /[inserted by cython to avoid comment start]* acknowledgement number set *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_RST, __pyx_int_4) < 0) __PYX_ERR(0, 822, __pyx_L1_error) + + /* "dnet.pyx":823 + * TH_SYN = 0x02 # /[inserted by cython to avoid comment start]* synchronize sequence numbers *[inserted by cython to avoid comment closer]/ + * TH_RST = 0x04 # /[inserted by cython to avoid comment start]* reset connection *[inserted by cython to avoid comment closer]/ + * TH_PUSH = 0x08 # /[inserted by cython to avoid comment start]* push *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_ACK = 0x10 # /[inserted by cython to avoid comment start]* acknowledgement number set *[inserted by cython to avoid comment closer]/ + * TH_URG = 0x20 # /[inserted by cython to avoid comment start]* urgent pointer set *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_PUSH, __pyx_int_8) < 0) __PYX_ERR(0, 823, __pyx_L1_error) + + /* "dnet.pyx":824 + * TH_RST = 0x04 # /[inserted by cython to avoid comment start]* reset connection *[inserted by cython to avoid comment closer]/ + * TH_PUSH = 0x08 # /[inserted by cython to avoid comment start]* push *[inserted by cython to avoid comment closer]/ + * TH_ACK = 0x10 # /[inserted by cython to avoid comment start]* acknowledgement number set *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_URG = 0x20 # /[inserted by cython to avoid comment start]* urgent pointer set *[inserted by cython to avoid comment closer]/ + * TH_ECE = 0x40 # /[inserted by cython to avoid comment start]* ECN echo, RFC 3168 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_ACK, __pyx_int_16) < 0) __PYX_ERR(0, 824, __pyx_L1_error) + + /* "dnet.pyx":825 + * TH_PUSH = 0x08 # /[inserted by cython to avoid comment start]* push *[inserted by cython to avoid comment closer]/ + * TH_ACK = 0x10 # /[inserted by cython to avoid comment start]* acknowledgement number set *[inserted by cython to avoid comment closer]/ + * TH_URG = 0x20 # /[inserted by cython to avoid comment start]* urgent pointer set *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_ECE = 0x40 # /[inserted by cython to avoid comment start]* ECN echo, RFC 3168 *[inserted by cython to avoid comment closer]/ + * TH_CWR = 0x80 # /[inserted by cython to avoid comment start]* congestion window reduced *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_URG, __pyx_int_32) < 0) __PYX_ERR(0, 825, __pyx_L1_error) + + /* "dnet.pyx":826 + * TH_ACK = 0x10 # /[inserted by cython to avoid comment start]* acknowledgement number set *[inserted by cython to avoid comment closer]/ + * TH_URG = 0x20 # /[inserted by cython to avoid comment start]* urgent pointer set *[inserted by cython to avoid comment closer]/ + * TH_ECE = 0x40 # /[inserted by cython to avoid comment start]* ECN echo, RFC 3168 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TH_CWR = 0x80 # /[inserted by cython to avoid comment start]* congestion window reduced *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_ECE, __pyx_int_64) < 0) __PYX_ERR(0, 826, __pyx_L1_error) + + /* "dnet.pyx":827 + * TH_URG = 0x20 # /[inserted by cython to avoid comment start]* urgent pointer set *[inserted by cython to avoid comment closer]/ + * TH_ECE = 0x40 # /[inserted by cython to avoid comment start]* ECN echo, RFC 3168 *[inserted by cython to avoid comment closer]/ + * TH_CWR = 0x80 # /[inserted by cython to avoid comment start]* congestion window reduced *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * TCP_PORT_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum port *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TH_CWR, __pyx_int_128) < 0) __PYX_ERR(0, 827, __pyx_L1_error) + + /* "dnet.pyx":829 + * TH_CWR = 0x80 # /[inserted by cython to avoid comment start]* congestion window reduced *[inserted by cython to avoid comment closer]/ + * + * TCP_PORT_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum port *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_WIN_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum (unscaled) window *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_PORT_MAX, __pyx_int_65535) < 0) __PYX_ERR(0, 829, __pyx_L1_error) + + /* "dnet.pyx":830 + * + * TCP_PORT_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum port *[inserted by cython to avoid comment closer]/ + * TCP_WIN_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum (unscaled) window *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * TCP_OPT_EOL = 0 # /[inserted by cython to avoid comment start]* end of option list *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_WIN_MAX, __pyx_int_65535) < 0) __PYX_ERR(0, 830, __pyx_L1_error) + + /* "dnet.pyx":832 + * TCP_WIN_MAX = 65535 # /[inserted by cython to avoid comment start]* maximum (unscaled) window *[inserted by cython to avoid comment closer]/ + * + * TCP_OPT_EOL = 0 # /[inserted by cython to avoid comment start]* end of option list *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_NOP = 1 # /[inserted by cython to avoid comment start]* no operation *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MSS = 2 # /[inserted by cython to avoid comment start]* maximum segment size *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_EOL, __pyx_int_0) < 0) __PYX_ERR(0, 832, __pyx_L1_error) + + /* "dnet.pyx":833 + * + * TCP_OPT_EOL = 0 # /[inserted by cython to avoid comment start]* end of option list *[inserted by cython to avoid comment closer]/ + * TCP_OPT_NOP = 1 # /[inserted by cython to avoid comment start]* no operation *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_MSS = 2 # /[inserted by cython to avoid comment start]* maximum segment size *[inserted by cython to avoid comment closer]/ + * TCP_OPT_WSCALE = 3 # /[inserted by cython to avoid comment start]* window scale factor, RFC 1072 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_NOP, __pyx_int_1) < 0) __PYX_ERR(0, 833, __pyx_L1_error) + + /* "dnet.pyx":834 + * TCP_OPT_EOL = 0 # /[inserted by cython to avoid comment start]* end of option list *[inserted by cython to avoid comment closer]/ + * TCP_OPT_NOP = 1 # /[inserted by cython to avoid comment start]* no operation *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MSS = 2 # /[inserted by cython to avoid comment start]* maximum segment size *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_WSCALE = 3 # /[inserted by cython to avoid comment start]* window scale factor, RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACKOK = 4 # /[inserted by cython to avoid comment start]* SACK permitted, RFC 2018 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_MSS, __pyx_int_2) < 0) __PYX_ERR(0, 834, __pyx_L1_error) + + /* "dnet.pyx":835 + * TCP_OPT_NOP = 1 # /[inserted by cython to avoid comment start]* no operation *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MSS = 2 # /[inserted by cython to avoid comment start]* maximum segment size *[inserted by cython to avoid comment closer]/ + * TCP_OPT_WSCALE = 3 # /[inserted by cython to avoid comment start]* window scale factor, RFC 1072 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SACKOK = 4 # /[inserted by cython to avoid comment start]* SACK permitted, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACK = 5 # /[inserted by cython to avoid comment start]* SACK, RFC 2018 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_WSCALE, __pyx_int_3) < 0) __PYX_ERR(0, 835, __pyx_L1_error) + + /* "dnet.pyx":836 + * TCP_OPT_MSS = 2 # /[inserted by cython to avoid comment start]* maximum segment size *[inserted by cython to avoid comment closer]/ + * TCP_OPT_WSCALE = 3 # /[inserted by cython to avoid comment start]* window scale factor, RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACKOK = 4 # /[inserted by cython to avoid comment start]* SACK permitted, RFC 2018 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SACK = 5 # /[inserted by cython to avoid comment start]* SACK, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHO = 6 # /[inserted by cython to avoid comment start]* echo (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SACKOK, __pyx_int_4) < 0) __PYX_ERR(0, 836, __pyx_L1_error) + + /* "dnet.pyx":837 + * TCP_OPT_WSCALE = 3 # /[inserted by cython to avoid comment start]* window scale factor, RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACKOK = 4 # /[inserted by cython to avoid comment start]* SACK permitted, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACK = 5 # /[inserted by cython to avoid comment start]* SACK, RFC 2018 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_ECHO = 6 # /[inserted by cython to avoid comment start]* echo (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHOREPLY = 7 # /[inserted by cython to avoid comment start]* echo reply (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SACK, __pyx_int_5) < 0) __PYX_ERR(0, 837, __pyx_L1_error) + + /* "dnet.pyx":838 + * TCP_OPT_SACKOK = 4 # /[inserted by cython to avoid comment start]* SACK permitted, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SACK = 5 # /[inserted by cython to avoid comment start]* SACK, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHO = 6 # /[inserted by cython to avoid comment start]* echo (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_ECHOREPLY = 7 # /[inserted by cython to avoid comment start]* echo reply (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TIMESTAMP = 8 # /[inserted by cython to avoid comment start]* timestamp, RFC 1323 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_ECHO, __pyx_int_6) < 0) __PYX_ERR(0, 838, __pyx_L1_error) + + /* "dnet.pyx":839 + * TCP_OPT_SACK = 5 # /[inserted by cython to avoid comment start]* SACK, RFC 2018 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHO = 6 # /[inserted by cython to avoid comment start]* echo (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHOREPLY = 7 # /[inserted by cython to avoid comment start]* echo reply (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_TIMESTAMP = 8 # /[inserted by cython to avoid comment start]* timestamp, RFC 1323 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POCONN = 9 # /[inserted by cython to avoid comment start]* partial order conn, RFC 1693 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_ECHOREPLY, __pyx_int_7) < 0) __PYX_ERR(0, 839, __pyx_L1_error) + + /* "dnet.pyx":840 + * TCP_OPT_ECHO = 6 # /[inserted by cython to avoid comment start]* echo (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ECHOREPLY = 7 # /[inserted by cython to avoid comment start]* echo reply (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TIMESTAMP = 8 # /[inserted by cython to avoid comment start]* timestamp, RFC 1323 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_POCONN = 9 # /[inserted by cython to avoid comment start]* partial order conn, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POSVC = 10 # /[inserted by cython to avoid comment start]* partial order service, RFC 1693 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_TIMESTAMP, __pyx_int_8) < 0) __PYX_ERR(0, 840, __pyx_L1_error) + + /* "dnet.pyx":841 + * TCP_OPT_ECHOREPLY = 7 # /[inserted by cython to avoid comment start]* echo reply (obsolete), RFC 1072 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TIMESTAMP = 8 # /[inserted by cython to avoid comment start]* timestamp, RFC 1323 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POCONN = 9 # /[inserted by cython to avoid comment start]* partial order conn, RFC 1693 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_POSVC = 10 # /[inserted by cython to avoid comment start]* partial order service, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CC = 11 # /[inserted by cython to avoid comment start]* connection count, RFC 1644 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_POCONN, __pyx_int_9) < 0) __PYX_ERR(0, 841, __pyx_L1_error) + + /* "dnet.pyx":842 + * TCP_OPT_TIMESTAMP = 8 # /[inserted by cython to avoid comment start]* timestamp, RFC 1323 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POCONN = 9 # /[inserted by cython to avoid comment start]* partial order conn, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POSVC = 10 # /[inserted by cython to avoid comment start]* partial order service, RFC 1693 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_CC = 11 # /[inserted by cython to avoid comment start]* connection count, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCNEW = 12 # /[inserted by cython to avoid comment start]* CC.NEW, RFC 1644 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_POSVC, __pyx_int_10) < 0) __PYX_ERR(0, 842, __pyx_L1_error) + + /* "dnet.pyx":843 + * TCP_OPT_POCONN = 9 # /[inserted by cython to avoid comment start]* partial order conn, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_POSVC = 10 # /[inserted by cython to avoid comment start]* partial order service, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CC = 11 # /[inserted by cython to avoid comment start]* connection count, RFC 1644 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_CCNEW = 12 # /[inserted by cython to avoid comment start]* CC.NEW, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCECHO = 13 # /[inserted by cython to avoid comment start]* CC.ECHO, RFC 1644 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_CC, __pyx_int_11) < 0) __PYX_ERR(0, 843, __pyx_L1_error) + + /* "dnet.pyx":844 + * TCP_OPT_POSVC = 10 # /[inserted by cython to avoid comment start]* partial order service, RFC 1693 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CC = 11 # /[inserted by cython to avoid comment start]* connection count, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCNEW = 12 # /[inserted by cython to avoid comment start]* CC.NEW, RFC 1644 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_CCECHO = 13 # /[inserted by cython to avoid comment start]* CC.ECHO, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUM = 14 # /[inserted by cython to avoid comment start]* alt checksum request, RFC 1146 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_CCNEW, __pyx_int_12) < 0) __PYX_ERR(0, 844, __pyx_L1_error) + + /* "dnet.pyx":845 + * TCP_OPT_CC = 11 # /[inserted by cython to avoid comment start]* connection count, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCNEW = 12 # /[inserted by cython to avoid comment start]* CC.NEW, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCECHO = 13 # /[inserted by cython to avoid comment start]* CC.ECHO, RFC 1644 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_ALTSUM = 14 # /[inserted by cython to avoid comment start]* alt checksum request, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUMDATA = 15 # /[inserted by cython to avoid comment start]* alt checksum data, RFC 1146 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_CCECHO, __pyx_int_13) < 0) __PYX_ERR(0, 845, __pyx_L1_error) + + /* "dnet.pyx":846 + * TCP_OPT_CCNEW = 12 # /[inserted by cython to avoid comment start]* CC.NEW, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CCECHO = 13 # /[inserted by cython to avoid comment start]* CC.ECHO, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUM = 14 # /[inserted by cython to avoid comment start]* alt checksum request, RFC 1146 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_ALTSUMDATA = 15 # /[inserted by cython to avoid comment start]* alt checksum data, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SKEETER = 16 # /[inserted by cython to avoid comment start]* Skeeter *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_ALTSUM, __pyx_int_14) < 0) __PYX_ERR(0, 846, __pyx_L1_error) + + /* "dnet.pyx":847 + * TCP_OPT_CCECHO = 13 # /[inserted by cython to avoid comment start]* CC.ECHO, RFC 1644 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUM = 14 # /[inserted by cython to avoid comment start]* alt checksum request, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUMDATA = 15 # /[inserted by cython to avoid comment start]* alt checksum data, RFC 1146 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SKEETER = 16 # /[inserted by cython to avoid comment start]* Skeeter *[inserted by cython to avoid comment closer]/ + * TCP_OPT_BUBBA = 17 # /[inserted by cython to avoid comment start]* Bubba *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_ALTSUMDATA, __pyx_int_15) < 0) __PYX_ERR(0, 847, __pyx_L1_error) + + /* "dnet.pyx":848 + * TCP_OPT_ALTSUM = 14 # /[inserted by cython to avoid comment start]* alt checksum request, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_ALTSUMDATA = 15 # /[inserted by cython to avoid comment start]* alt checksum data, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SKEETER = 16 # /[inserted by cython to avoid comment start]* Skeeter *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_BUBBA = 17 # /[inserted by cython to avoid comment start]* Bubba *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TRAILSUM = 18 # /[inserted by cython to avoid comment start]* trailer checksum *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SKEETER, __pyx_int_16) < 0) __PYX_ERR(0, 848, __pyx_L1_error) + + /* "dnet.pyx":849 + * TCP_OPT_ALTSUMDATA = 15 # /[inserted by cython to avoid comment start]* alt checksum data, RFC 1146 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SKEETER = 16 # /[inserted by cython to avoid comment start]* Skeeter *[inserted by cython to avoid comment closer]/ + * TCP_OPT_BUBBA = 17 # /[inserted by cython to avoid comment start]* Bubba *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_TRAILSUM = 18 # /[inserted by cython to avoid comment start]* trailer checksum *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MD5 = 19 # /[inserted by cython to avoid comment start]* MD5 signature, RFC 2385 *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_BUBBA, __pyx_int_17) < 0) __PYX_ERR(0, 849, __pyx_L1_error) + + /* "dnet.pyx":850 + * TCP_OPT_SKEETER = 16 # /[inserted by cython to avoid comment start]* Skeeter *[inserted by cython to avoid comment closer]/ + * TCP_OPT_BUBBA = 17 # /[inserted by cython to avoid comment start]* Bubba *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TRAILSUM = 18 # /[inserted by cython to avoid comment start]* trailer checksum *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_MD5 = 19 # /[inserted by cython to avoid comment start]* MD5 signature, RFC 2385 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SCPS = 20 # /[inserted by cython to avoid comment start]* SCPS capabilities *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_TRAILSUM, __pyx_int_18) < 0) __PYX_ERR(0, 850, __pyx_L1_error) + + /* "dnet.pyx":851 + * TCP_OPT_BUBBA = 17 # /[inserted by cython to avoid comment start]* Bubba *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TRAILSUM = 18 # /[inserted by cython to avoid comment start]* trailer checksum *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MD5 = 19 # /[inserted by cython to avoid comment start]* MD5 signature, RFC 2385 *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SCPS = 20 # /[inserted by cython to avoid comment start]* SCPS capabilities *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNACK = 21 # /[inserted by cython to avoid comment start]* selective negative acks *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_MD5, __pyx_int_19) < 0) __PYX_ERR(0, 851, __pyx_L1_error) + + /* "dnet.pyx":852 + * TCP_OPT_TRAILSUM = 18 # /[inserted by cython to avoid comment start]* trailer checksum *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MD5 = 19 # /[inserted by cython to avoid comment start]* MD5 signature, RFC 2385 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SCPS = 20 # /[inserted by cython to avoid comment start]* SCPS capabilities *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SNACK = 21 # /[inserted by cython to avoid comment start]* selective negative acks *[inserted by cython to avoid comment closer]/ + * TCP_OPT_REC = 22 # /[inserted by cython to avoid comment start]* record boundaries *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SCPS, __pyx_int_20) < 0) __PYX_ERR(0, 852, __pyx_L1_error) + + /* "dnet.pyx":853 + * TCP_OPT_MD5 = 19 # /[inserted by cython to avoid comment start]* MD5 signature, RFC 2385 *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SCPS = 20 # /[inserted by cython to avoid comment start]* SCPS capabilities *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNACK = 21 # /[inserted by cython to avoid comment start]* selective negative acks *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_REC = 22 # /[inserted by cython to avoid comment start]* record boundaries *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CORRUPT = 23 # /[inserted by cython to avoid comment start]* corruption experienced *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SNACK, __pyx_int_21) < 0) __PYX_ERR(0, 853, __pyx_L1_error) + + /* "dnet.pyx":854 + * TCP_OPT_SCPS = 20 # /[inserted by cython to avoid comment start]* SCPS capabilities *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNACK = 21 # /[inserted by cython to avoid comment start]* selective negative acks *[inserted by cython to avoid comment closer]/ + * TCP_OPT_REC = 22 # /[inserted by cython to avoid comment start]* record boundaries *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_CORRUPT = 23 # /[inserted by cython to avoid comment start]* corruption experienced *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNAP = 24 # /[inserted by cython to avoid comment start]* SNAP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_REC, __pyx_int_22) < 0) __PYX_ERR(0, 854, __pyx_L1_error) + + /* "dnet.pyx":855 + * TCP_OPT_SNACK = 21 # /[inserted by cython to avoid comment start]* selective negative acks *[inserted by cython to avoid comment closer]/ + * TCP_OPT_REC = 22 # /[inserted by cython to avoid comment start]* record boundaries *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CORRUPT = 23 # /[inserted by cython to avoid comment start]* corruption experienced *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_SNAP = 24 # /[inserted by cython to avoid comment start]* SNAP *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TCPCOMP = 26 # /[inserted by cython to avoid comment start]* TCP compression filter *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_CORRUPT, __pyx_int_23) < 0) __PYX_ERR(0, 855, __pyx_L1_error) + + /* "dnet.pyx":856 + * TCP_OPT_REC = 22 # /[inserted by cython to avoid comment start]* record boundaries *[inserted by cython to avoid comment closer]/ + * TCP_OPT_CORRUPT = 23 # /[inserted by cython to avoid comment start]* corruption experienced *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNAP = 24 # /[inserted by cython to avoid comment start]* SNAP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_TCPCOMP = 26 # /[inserted by cython to avoid comment start]* TCP compression filter *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MAX = 27 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_SNAP, __pyx_int_24) < 0) __PYX_ERR(0, 856, __pyx_L1_error) + + /* "dnet.pyx":857 + * TCP_OPT_CORRUPT = 23 # /[inserted by cython to avoid comment start]* corruption experienced *[inserted by cython to avoid comment closer]/ + * TCP_OPT_SNAP = 24 # /[inserted by cython to avoid comment start]* SNAP *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TCPCOMP = 26 # /[inserted by cython to avoid comment start]* TCP compression filter *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * TCP_OPT_MAX = 27 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_TCPCOMP, __pyx_int_26) < 0) __PYX_ERR(0, 857, __pyx_L1_error) + + /* "dnet.pyx":858 + * TCP_OPT_SNAP = 24 # /[inserted by cython to avoid comment start]* SNAP *[inserted by cython to avoid comment closer]/ + * TCP_OPT_TCPCOMP = 26 # /[inserted by cython to avoid comment start]* TCP compression filter *[inserted by cython to avoid comment closer]/ + * TCP_OPT_MAX = 27 # <<<<<<<<<<<<<< + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_TCP_OPT_MAX, __pyx_int_27) < 0) __PYX_ERR(0, 858, __pyx_L1_error) + + /* "dnet.pyx":860 + * TCP_OPT_MAX = 27 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, # <<<<<<<<<<<<<< + * win=TCP_WIN_MAX, urp=0): + * """Return a packed binary string representing a TCP header. + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TH_SYN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 860, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__28 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":861 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, + * win=TCP_WIN_MAX, urp=0): # <<<<<<<<<<<<<< + * """Return a packed binary string representing a TCP header. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TCP_WIN_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 861, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__29 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + + /* "dnet.pyx":860 + * TCP_OPT_MAX = 27 + * + * def tcp_pack_hdr(sport, dport, seq=1, ack=0, flags=TH_SYN, # <<<<<<<<<<<<<< + * win=TCP_WIN_MAX, urp=0): + * """Return a packed binary string representing a TCP header. + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_33tcp_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 860, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_tcp_pack_hdr, __pyx_t_3) < 0) __PYX_ERR(0, 860, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":883 + * void __udp_pack_hdr "udp_pack_hdr" (char *hdr, int sport, int dport, int ulen) + * + * UDP_HDR_LEN = 8 # <<<<<<<<<<<<<< + * UDP_PORT_MAX = 65535 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_UDP_HDR_LEN, __pyx_int_8) < 0) __PYX_ERR(0, 883, __pyx_L1_error) + + /* "dnet.pyx":884 + * + * UDP_HDR_LEN = 8 + * UDP_PORT_MAX = 65535 # <<<<<<<<<<<<<< + * + * def udp_pack_hdr(sport, dport, ulen=UDP_HDR_LEN): + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_UDP_PORT_MAX, __pyx_int_65535) < 0) __PYX_ERR(0, 884, __pyx_L1_error) + + /* "dnet.pyx":886 + * UDP_PORT_MAX = 65535 + * + * def udp_pack_hdr(sport, dport, ulen=UDP_HDR_LEN): # <<<<<<<<<<<<<< + * """Return a packed binary string representing a UDP header. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_UDP_HDR_LEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_k__30 = __pyx_t_3; + __Pyx_GIVEREF(__pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_35udp_pack_hdr, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_udp_pack_hdr, __pyx_t_3) < 0) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":925 + * intf_t *intf_close(intf_t *intf) + * + * INTF_TYPE_OTHER = 1 # /[inserted by cython to avoid comment start]* other *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_TYPE_ETH = 6 # /[inserted by cython to avoid comment start]* Ethernet *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_LOOPBACK = 24 # /[inserted by cython to avoid comment start]* software loopback *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_TYPE_OTHER, __pyx_int_1) < 0) __PYX_ERR(0, 925, __pyx_L1_error) + + /* "dnet.pyx":926 + * + * INTF_TYPE_OTHER = 1 # /[inserted by cython to avoid comment start]* other *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_ETH = 6 # /[inserted by cython to avoid comment start]* Ethernet *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_TYPE_LOOPBACK = 24 # /[inserted by cython to avoid comment start]* software loopback *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_TUN = 53 # /[inserted by cython to avoid comment start]* proprietary virtual/internal *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_TYPE_ETH, __pyx_int_6) < 0) __PYX_ERR(0, 926, __pyx_L1_error) + + /* "dnet.pyx":927 + * INTF_TYPE_OTHER = 1 # /[inserted by cython to avoid comment start]* other *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_ETH = 6 # /[inserted by cython to avoid comment start]* Ethernet *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_LOOPBACK = 24 # /[inserted by cython to avoid comment start]* software loopback *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_TYPE_TUN = 53 # /[inserted by cython to avoid comment start]* proprietary virtual/internal *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_TYPE_LOOPBACK, __pyx_int_24) < 0) __PYX_ERR(0, 927, __pyx_L1_error) + + /* "dnet.pyx":928 + * INTF_TYPE_ETH = 6 # /[inserted by cython to avoid comment start]* Ethernet *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_LOOPBACK = 24 # /[inserted by cython to avoid comment start]* software loopback *[inserted by cython to avoid comment closer]/ + * INTF_TYPE_TUN = 53 # /[inserted by cython to avoid comment start]* proprietary virtual/internal *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * INTF_FLAG_UP = 0x01 # /[inserted by cython to avoid comment start]* enable interface *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_TYPE_TUN, __pyx_int_53) < 0) __PYX_ERR(0, 928, __pyx_L1_error) + + /* "dnet.pyx":930 + * INTF_TYPE_TUN = 53 # /[inserted by cython to avoid comment start]* proprietary virtual/internal *[inserted by cython to avoid comment closer]/ + * + * INTF_FLAG_UP = 0x01 # /[inserted by cython to avoid comment start]* enable interface *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_FLAG_LOOPBACK = 0x02 # /[inserted by cython to avoid comment start]* is a loopback net (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_POINTOPOINT = 0x04 # /[inserted by cython to avoid comment start]* point-to-point link (r/o) *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_UP, __pyx_int_1) < 0) __PYX_ERR(0, 930, __pyx_L1_error) + + /* "dnet.pyx":931 + * + * INTF_FLAG_UP = 0x01 # /[inserted by cython to avoid comment start]* enable interface *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_LOOPBACK = 0x02 # /[inserted by cython to avoid comment start]* is a loopback net (r/o) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_FLAG_POINTOPOINT = 0x04 # /[inserted by cython to avoid comment start]* point-to-point link (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_NOARP = 0x08 # /[inserted by cython to avoid comment start]* disable ARP *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_LOOPBACK, __pyx_int_2) < 0) __PYX_ERR(0, 931, __pyx_L1_error) + + /* "dnet.pyx":932 + * INTF_FLAG_UP = 0x01 # /[inserted by cython to avoid comment start]* enable interface *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_LOOPBACK = 0x02 # /[inserted by cython to avoid comment start]* is a loopback net (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_POINTOPOINT = 0x04 # /[inserted by cython to avoid comment start]* point-to-point link (r/o) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_FLAG_NOARP = 0x08 # /[inserted by cython to avoid comment start]* disable ARP *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_BROADCAST = 0x10 # /[inserted by cython to avoid comment start]* supports broadcast (r/o) *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_POINTOPOINT, __pyx_int_4) < 0) __PYX_ERR(0, 932, __pyx_L1_error) + + /* "dnet.pyx":933 + * INTF_FLAG_LOOPBACK = 0x02 # /[inserted by cython to avoid comment start]* is a loopback net (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_POINTOPOINT = 0x04 # /[inserted by cython to avoid comment start]* point-to-point link (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_NOARP = 0x08 # /[inserted by cython to avoid comment start]* disable ARP *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_FLAG_BROADCAST = 0x10 # /[inserted by cython to avoid comment start]* supports broadcast (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_MULTICAST = 0x20 # /[inserted by cython to avoid comment start]* supports multicast (r/o) *[inserted by cython to avoid comment closer]/ + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_NOARP, __pyx_int_8) < 0) __PYX_ERR(0, 933, __pyx_L1_error) + + /* "dnet.pyx":934 + * INTF_FLAG_POINTOPOINT = 0x04 # /[inserted by cython to avoid comment start]* point-to-point link (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_NOARP = 0x08 # /[inserted by cython to avoid comment start]* disable ARP *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_BROADCAST = 0x10 # /[inserted by cython to avoid comment start]* supports broadcast (r/o) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * INTF_FLAG_MULTICAST = 0x20 # /[inserted by cython to avoid comment start]* supports multicast (r/o) *[inserted by cython to avoid comment closer]/ + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_BROADCAST, __pyx_int_16) < 0) __PYX_ERR(0, 934, __pyx_L1_error) + + /* "dnet.pyx":935 + * INTF_FLAG_NOARP = 0x08 # /[inserted by cython to avoid comment start]* disable ARP *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_BROADCAST = 0x10 # /[inserted by cython to avoid comment start]* supports broadcast (r/o) *[inserted by cython to avoid comment closer]/ + * INTF_FLAG_MULTICAST = 0x20 # /[inserted by cython to avoid comment start]* supports multicast (r/o) *[inserted by cython to avoid comment closer]/ # <<<<<<<<<<<<<< + * + * cdef object ifent_to_dict(intf_entry *entry): + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTF_FLAG_MULTICAST, __pyx_int_32) < 0) __PYX_ERR(0, 935, __pyx_L1_error) + + /* "dnet.pyx":1195 + * fw_t *fw_close(fw_t *f) + * + * FW_OP_ALLOW = 1 # <<<<<<<<<<<<<< + * FW_OP_BLOCK = 2 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FW_OP_ALLOW, __pyx_int_1) < 0) __PYX_ERR(0, 1195, __pyx_L1_error) + + /* "dnet.pyx":1196 + * + * FW_OP_ALLOW = 1 + * FW_OP_BLOCK = 2 # <<<<<<<<<<<<<< + * + * FW_DIR_IN = 1 + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FW_OP_BLOCK, __pyx_int_2) < 0) __PYX_ERR(0, 1196, __pyx_L1_error) + + /* "dnet.pyx":1198 + * FW_OP_BLOCK = 2 + * + * FW_DIR_IN = 1 # <<<<<<<<<<<<<< + * FW_DIR_OUT = 2 + * + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FW_DIR_IN, __pyx_int_1) < 0) __PYX_ERR(0, 1198, __pyx_L1_error) + + /* "dnet.pyx":1199 + * + * FW_DIR_IN = 1 + * FW_DIR_OUT = 2 # <<<<<<<<<<<<<< + * + * cdef object rule_to_dict(fw_rule *rule): + */ + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FW_DIR_OUT, __pyx_int_2) < 0) __PYX_ERR(0, 1199, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __pyx_unpickle___addr_ip4_iter(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_4dnet_37__pyx_unpickle___addr_ip4_iter, NULL, __pyx_n_s_dnet); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle___addr_ip4_iter, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dnet.pyx":1 + * # cython: language_level=3, boundscheck=False # <<<<<<<<<<<<<< + * # + * # dnet.pyx + */ + __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init dnet", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init dnet"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* CIntToDigits */ +static const char DIGIT_PAIRS_10[2*10*10+1] = { + "00010203040506070809" + "10111213141516171819" + "20212223242526272829" + "30313233343536373839" + "40414243444546474849" + "50515253545556575859" + "60616263646566676869" + "70717273747576777879" + "80818283848586878889" + "90919293949596979899" +}; +static const char DIGIT_PAIRS_8[2*8*8+1] = { + "0001020304050607" + "1011121314151617" + "2021222324252627" + "3031323334353637" + "4041424344454647" + "5051525354555657" + "6061626364656667" + "7071727374757677" +}; +static const char DIGITS_HEX[2*16+1] = { + "0123456789abcdef" + "0123456789ABCDEF" +}; + +/* BuildPyUnicode */ +static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength, + int prepend_sign, char padding_char) { + PyObject *uval; + Py_ssize_t uoffset = ulength - clength; +#if CYTHON_USE_UNICODE_INTERNALS + Py_ssize_t i; +#if CYTHON_PEP393_ENABLED + void *udata; + uval = PyUnicode_New(ulength, 127); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_DATA(uval); +#else + Py_UNICODE *udata; + uval = PyUnicode_FromUnicode(NULL, ulength); + if (unlikely(!uval)) return NULL; + udata = PyUnicode_AS_UNICODE(uval); +#endif + if (uoffset > 0) { + i = 0; + if (prepend_sign) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-'); + i++; + } + for (; i < uoffset; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char); + } + } + for (i=0; i < clength; i++) { + __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]); + } +#else + { + PyObject *sign = NULL, *padding = NULL; + uval = NULL; + if (uoffset > 0) { + prepend_sign = !!prepend_sign; + if (uoffset > prepend_sign) { + padding = PyUnicode_FromOrdinal(padding_char); + if (likely(padding) && uoffset > prepend_sign + 1) { + PyObject *tmp; + PyObject *repeat = PyInt_FromSize_t(uoffset - prepend_sign); + if (unlikely(!repeat)) goto done_or_error; + tmp = PyNumber_Multiply(padding, repeat); + Py_DECREF(repeat); + Py_DECREF(padding); + padding = tmp; + } + if (unlikely(!padding)) goto done_or_error; + } + if (prepend_sign) { + sign = PyUnicode_FromOrdinal('-'); + if (unlikely(!sign)) goto done_or_error; + } + } + uval = PyUnicode_DecodeASCII(chars, clength, NULL); + if (likely(uval) && padding) { + PyObject *tmp = PyNumber_Add(padding, uval); + Py_DECREF(uval); + uval = tmp; + } + if (likely(uval) && sign) { + PyObject *tmp = PyNumber_Add(sign, uval); + Py_DECREF(uval); + uval = tmp; + } +done_or_error: + Py_XDECREF(padding); + Py_XDECREF(sign); + } +#endif + return uval; +} + +/* CIntToPyUnicode */ +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char) { + char digits[sizeof(int)*3+2]; + char *dpos, *end = digits + sizeof(int)*3+2; + const char *hex_digits = DIGITS_HEX; + Py_ssize_t length, ulength; + int prepend_sign, last_one_off; + int remaining; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (format_char == 'X') { + hex_digits += 16; + format_char = 'x'; + } + remaining = value; + last_one_off = 0; + dpos = end; + do { + int digit_pos; + switch (format_char) { + case 'o': + digit_pos = abs((int)(remaining % (8*8))); + remaining = (int) (remaining / (8*8)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2); + last_one_off = (digit_pos < 8); + break; + case 'd': + digit_pos = abs((int)(remaining % (10*10))); + remaining = (int) (remaining / (10*10)); + dpos -= 2; + memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2); + last_one_off = (digit_pos < 10); + break; + case 'x': + *(--dpos) = hex_digits[abs((int)(remaining % 16))]; + remaining = (int) (remaining / 16); + break; + default: + assert(0); + break; + } + } while (unlikely(remaining != 0)); + if (last_one_off) { + assert(*dpos == '0'); + dpos++; + } + length = end - dpos; + ulength = length; + prepend_sign = 0; + if (!is_unsigned && value <= neg_one) { + if (padding_char == ' ' || width <= length + 1) { + *(--dpos) = '-'; + ++length; + } else { + prepend_sign = 1; + } + ++ulength; + } + if (width > ulength) { + ulength = width; + } + if (ulength == 1) { + return PyUnicode_FromOrdinal(*dpos); + } + return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char); +} + +/* PyObjectFormatAndDecref */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) { + if (unlikely(!s)) return NULL; + if (likely(PyUnicode_CheckExact(s))) return s; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(s))) { + PyObject *result = PyUnicode_FromEncodedObject(s, NULL, "strict"); + Py_DECREF(s); + return result; + } + #endif + return __Pyx_PyObject_FormatAndDecref(s, f); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) { + PyObject *result = PyObject_Format(s, f); + Py_DECREF(s); + return result; +} + +/* JoinPyUnicode */ +static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength, + CYTHON_UNUSED Py_UCS4 max_char) { +#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + PyObject *result_uval; + int result_ukind; + Py_ssize_t i, char_pos; + void *result_udata; +#if CYTHON_PEP393_ENABLED + result_uval = PyUnicode_New(result_ulength, max_char); + if (unlikely(!result_uval)) return NULL; + result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND; + result_udata = PyUnicode_DATA(result_uval); +#else + result_uval = PyUnicode_FromUnicode(NULL, result_ulength); + if (unlikely(!result_uval)) return NULL; + result_ukind = sizeof(Py_UNICODE); + result_udata = PyUnicode_AS_UNICODE(result_uval); +#endif + char_pos = 0; + for (i=0; i < value_count; i++) { + int ukind; + Py_ssize_t ulength; + void *udata; + PyObject *uval = PyTuple_GET_ITEM(value_tuple, i); + if (unlikely(__Pyx_PyUnicode_READY(uval))) + goto bad; + ulength = __Pyx_PyUnicode_GET_LENGTH(uval); + if (unlikely(!ulength)) + continue; + if (unlikely(char_pos + ulength < 0)) + goto overflow; + ukind = __Pyx_PyUnicode_KIND(uval); + udata = __Pyx_PyUnicode_DATA(uval); + if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) { + memcpy((char *)result_udata + char_pos * result_ukind, udata, (size_t) (ulength * result_ukind)); + } else { + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters) + _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength); + #else + Py_ssize_t j; + for (j=0; j < ulength; j++) { + Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j); + __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar); + } + #endif + } + char_pos += ulength; + } + return result_uval; +overflow: + PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string"); +bad: + Py_DECREF(result_uval); + return NULL; +#else + result_ulength++; + value_count++; + return PyUnicode_Join(__pyx_empty_unicode, value_tuple); +#endif +} + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, (int)nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = Py_TYPE(func)->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (__Pyx_PyFastCFunction_Check(func)) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* PyObjectGetMethod */ +static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { + PyObject *attr; +#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP + PyTypeObject *tp = Py_TYPE(obj); + PyObject *descr; + descrgetfunc f = NULL; + PyObject **dictptr, *dict; + int meth_found = 0; + assert (*method == NULL); + if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; + } + if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { + return 0; + } + descr = _PyType_Lookup(tp, name); + if (likely(descr != NULL)) { + Py_INCREF(descr); +#if PY_MAJOR_VERSION >= 3 + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) + #endif +#else + #ifdef __Pyx_CyFunction_USED + if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) + #else + if (likely(PyFunction_Check(descr))) + #endif +#endif + { + meth_found = 1; + } else { + f = Py_TYPE(descr)->tp_descr_get; + if (f != NULL && PyDescr_IsData(descr)) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + } + } + dictptr = _PyObject_GetDictPtr(obj); + if (dictptr != NULL && (dict = *dictptr) != NULL) { + Py_INCREF(dict); + attr = __Pyx_PyDict_GetItemStr(dict, name); + if (attr != NULL) { + Py_INCREF(attr); + Py_DECREF(dict); + Py_XDECREF(descr); + goto try_unpack; + } + Py_DECREF(dict); + } + if (meth_found) { + *method = descr; + return 1; + } + if (f != NULL) { + attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); + Py_DECREF(descr); + goto try_unpack; + } + if (descr != NULL) { + *method = descr; + return 0; + } + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(name)); +#endif + return 0; +#else + attr = __Pyx_PyObject_GetAttrStr(obj, name); + goto try_unpack; +#endif +try_unpack: +#if CYTHON_UNPACK_METHODS + if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { + PyObject *function = PyMethod_GET_FUNCTION(attr); + Py_INCREF(function); + Py_DECREF(attr); + *method = function; + return 1; + } +#endif + *method = attr; + return 0; +} + +/* PyObjectCallMethod1 */ +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +} + +/* append */ +static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { + if (likely(PyList_CheckExact(L))) { + if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; + } else { + PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); + if (unlikely(!retval)) + return -1; + Py_DECREF(retval); + } + return 0; +} + +/* KeywordStringCheck */ +static int __Pyx_CheckKeywordStrings( + PyObject *kwdict, + const char* function_name, + int kw_allowed) +{ + PyObject* key = 0; + Py_ssize_t pos = 0; +#if CYTHON_COMPILING_IN_PYPY + if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) + goto invalid_keyword; + return 1; +#else + while (PyDict_Next(kwdict, &pos, &key, 0)) { + #if PY_MAJOR_VERSION < 3 + if (unlikely(!PyString_Check(key))) + #endif + if (unlikely(!PyUnicode_Check(key))) + goto invalid_keyword_type; + } + if ((!kw_allowed) && unlikely(key)) + goto invalid_keyword; + return 1; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + return 0; +#endif +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif + return 0; +} + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* PyObjectCallNoArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, NULL, 0); + } +#endif +#ifdef __Pyx_CyFunction_USED + if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) +#else + if (likely(PyCFunction_Check(func))) +#endif + { + if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { + return __Pyx_PyObject_CallMethO(func, NULL); + } + } + return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); +} +#endif + +/* ArgTypeTest */ +static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) +{ + if (unlikely(!type)) { + PyErr_SetString(PyExc_SystemError, "Missing type object"); + return 0; + } + else if (exact) { + #if PY_MAJOR_VERSION == 2 + if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; + #endif + } + else { + if (likely(__Pyx_TypeCheck(obj, type))) return 1; + } + PyErr_Format(PyExc_TypeError, + "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", + name, type->tp_name, Py_TYPE(obj)->tp_name); + return 0; +} + +/* PyErrExceptionMatches */ +#if CYTHON_FAST_THREAD_STATE +static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; icurexc_type; + if (exc_type == err) return 1; + if (unlikely(!exc_type)) return 0; + if (unlikely(PyTuple_Check(err))) + return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); + return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); +} +#endif + +/* GetAttr */ +static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { +#if CYTHON_USE_TYPE_SLOTS +#if PY_MAJOR_VERSION >= 3 + if (likely(PyUnicode_Check(n))) +#else + if (likely(PyString_Check(n))) +#endif + return __Pyx_PyObject_GetAttrStr(o, n); +#endif + return PyObject_GetAttr(o, n); +} + +/* GetAttr3 */ +static PyObject *__Pyx_GetAttr3Default(PyObject *d) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + __Pyx_PyErr_Clear(); + Py_INCREF(d); + return d; +} +static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { + PyObject *r = __Pyx_GetAttr(o, n); + return (likely(r)) ? r : __Pyx_GetAttr3Default(d); +} + +/* RaiseTooManyValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { + PyErr_Format(PyExc_ValueError, + "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); +} + +/* RaiseNeedMoreValuesToUnpack */ +static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { + PyErr_Format(PyExc_ValueError, + "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", + index, (index == 1) ? "" : "s"); +} + +/* IterFinish */ +static CYTHON_INLINE int __Pyx_IterFinish(void) { +#if CYTHON_FAST_THREAD_STATE + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* exc_type = tstate->curexc_type; + if (unlikely(exc_type)) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { + PyObject *exc_value, *exc_tb; + exc_value = tstate->curexc_value; + exc_tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; + Py_DECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + return 0; + } else { + return -1; + } + } + return 0; +#else + if (unlikely(PyErr_Occurred())) { + if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { + PyErr_Clear(); + return 0; + } else { + return -1; + } + } + return 0; +#endif +} + +/* UnpackItemEndCheck */ +static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { + if (unlikely(retval)) { + Py_DECREF(retval); + __Pyx_RaiseTooManyValuesError(expected); + return -1; + } else { + return __Pyx_IterFinish(); + } + return 0; +} + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (unlikely(!r)) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* PyObject_GenericGetAttrNoDict */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'%.50s' object has no attribute '%U'", + tp->tp_name, attr_name); +#else + "'%.50s' object has no attribute '%.400s'", + tp->tp_name, PyString_AS_STRING(attr_name)); +#endif + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ +#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* PyObjectGetAttrStrNoError */ +static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) + __Pyx_PyErr_Clear(); +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { + PyObject *result; +#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { + return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); + } +#endif + result = __Pyx_PyObject_GetAttrStr(obj, attr_name); + if (unlikely(!result)) { + __Pyx_PyObject_GetAttrStr_ClearAttributeError(); + } + return result; +} + +/* SetupReduce */ +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#else + if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; +#endif +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#else + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } + } + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) + PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); +#endif + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":15 */ - if (PyObject_SetAttr(__pyx_m, __pyx_n___author__, __pyx_k9p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":16 */ - if (PyObject_SetAttr(__pyx_m, __pyx_n___copyright__, __pyx_k10p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":17 */ - if (PyObject_SetAttr(__pyx_m, __pyx_n___license__, __pyx_n_BSD) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":18 */ - if (PyObject_SetAttr(__pyx_m, __pyx_n___url__, __pyx_k12p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":19 */ - if (PyObject_SetAttr(__pyx_m, __pyx_n___version__, __pyx_k13p) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":75 */ - __pyx_1 = PyLong_FromLong(6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_ADDR_LEN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 75; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":76 */ - __pyx_1 = PyLong_FromLong(48); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_ADDR_BITS, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":77 */ - __pyx_1 = PyLong_FromLong(2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_LEN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":78 */ - __pyx_1 = PyLong_FromLong(4); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_CRC_LEN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":79 */ - __pyx_1 = PyLong_FromLong(14); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_HDR_LEN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":81 */ - __pyx_1 = PyLong_FromLong(64); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_LEN_MIN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":82 */ - __pyx_1 = PyLong_FromLong(1518); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_LEN_MAX, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":84 */ - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_LEN_MAX); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_HDR_LEN); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - __pyx_3 = PyNumber_Subtract(__pyx_1, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - Py_DECREF(__pyx_2); __pyx_2 = 0; - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_CRC_LEN); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - __pyx_2 = PyNumber_Subtract(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_MTU, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":85 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_LEN_MIN); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_HDR_LEN); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - __pyx_2 = PyNumber_Subtract(__pyx_3, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_CRC_LEN); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - __pyx_1 = PyNumber_Subtract(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - Py_DECREF(__pyx_3); __pyx_3 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_MIN, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":87 */ - __pyx_2 = PyLong_FromLong(512); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_PUP, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":88 */ - __pyx_3 = PyLong_FromLong(2048); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_IP, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":89 */ - __pyx_1 = PyLong_FromLong(2054); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_ARP, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":90 */ - __pyx_2 = PyLong_FromLong(32821); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_REVARP, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":91 */ - __pyx_3 = PyLong_FromLong(33024); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_8021Q, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":92 */ - __pyx_1 = PyLong_FromLong(34525); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_IPV6, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":93 */ - __pyx_2 = PyLong_FromLong(34887); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_MPLS, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":94 */ - __pyx_3 = PyLong_FromLong(34888); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_MPLS_MCAST, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":95 */ - __pyx_1 = PyLong_FromLong(34915); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_PPPOEDISC, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":96 */ - __pyx_2 = PyLong_FromLong(34916); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_PPPOE, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":97 */ - __pyx_3 = PyLong_FromLong(36864); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_TYPE_LOOPBACK, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; goto __pyx_L1;} - Py_DECREF(__pyx_3); __pyx_3 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":99 */ - __pyx_1 = PyBytes_FromStringAndSize(__pyx_k14,6); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_ADDR_UNSPEC, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 99; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":100 */ - __pyx_2 = PyBytes_FromStringAndSize(__pyx_k15,6); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ETH_ADDR_BROADCAST, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; goto __pyx_L1;} - Py_DECREF(__pyx_2); __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":162 */ - __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_BROADCAST); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; goto __pyx_L1;} - __pyx_k16 = __pyx_3; - __pyx_3 = 0; - __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_BROADCAST); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; goto __pyx_L1;} - __pyx_k17 = __pyx_1; - __pyx_1 = 0; - __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_TYPE_IP); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; goto __pyx_L1;} - __pyx_k18 = __pyx_2; - __pyx_2 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":199 */ - __pyx_4 = PyLong_FromLong(4); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_LEN, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":200 */ - __pyx_4 = PyLong_FromLong(32); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_BITS, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":202 */ - __pyx_4 = PyLong_FromLong(20); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_HDR_LEN, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":203 */ - __pyx_4 = PyLong_FromLong(2); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_OPT_LEN, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 203; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":204 */ - __pyx_4 = PyLong_FromLong(40); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_OPT_LEN_MAX, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 204; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":205 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_IP_HDR_LEN); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;} - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n_IP_OPT_LEN_MAX); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;} - __pyx_6 = PyNumber_Add(__pyx_4, __pyx_5); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - Py_DECREF(__pyx_5); __pyx_5 = 0; - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_HDR_LEN_MAX, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 205; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":207 */ - __pyx_4 = PyLong_FromLong(65535); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_LEN_MAX, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":208 */ - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n_IP_HDR_LEN); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_LEN_MIN, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":210 */ - __pyx_6 = PyLong_FromLong(0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_TOS_DEFAULT, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":212 */ - __pyx_4 = PyLong_FromLong(32768); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_RF, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":213 */ - __pyx_5 = PyLong_FromLong(16384); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_DF, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":214 */ - __pyx_6 = PyLong_FromLong(8192); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_MF, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":215 */ - __pyx_4 = PyLong_FromLong(8191); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_OFFMASK, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":217 */ - __pyx_5 = PyLong_FromLong(64); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_TTL_DEFAULT, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":218 */ - __pyx_6 = PyLong_FromLong(255); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_TTL_MAX, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":220 */ - __pyx_4 = PyLong_FromLong(0); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_IP, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":221 */ - __pyx_5 = PyLong_FromLong(1); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_ICMP, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":222 */ - __pyx_6 = PyLong_FromLong(2); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_IGMP, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":223 */ - __pyx_4 = PyLong_FromLong(6); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_TCP, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":224 */ - __pyx_5 = PyLong_FromLong(17); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_UDP, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":225 */ - __pyx_6 = PyLong_FromLong(41); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_IPV6, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":226 */ - __pyx_4 = PyLong_FromLong(47); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_GRE, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":227 */ - __pyx_5 = PyLong_FromLong(50); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_ESP, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":228 */ - __pyx_6 = PyLong_FromLong(51); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_AH, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":229 */ - __pyx_4 = PyLong_FromLong(58); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_ICMPV6, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":230 */ - __pyx_5 = PyLong_FromLong(255); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_RAW, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":231 */ - __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_n_IP_PROTO_RAW); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_RESERVED, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":232 */ - __pyx_4 = PyLong_FromLong(255); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_PROTO_MAX, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":234 */ - __pyx_5 = PyBytes_FromStringAndSize(__pyx_k19,4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_ANY, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":235 */ - __pyx_6 = PyBytes_FromStringAndSize(__pyx_k20,4); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_BROADCAST, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":236 */ - __pyx_4 = PyBytes_FromStringAndSize(__pyx_k21,4); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_LOOPBACK, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":237 */ - __pyx_5 = PyBytes_FromStringAndSize(__pyx_k22,4); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_MCAST_ALL, __pyx_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; goto __pyx_L1;} - Py_DECREF(__pyx_5); __pyx_5 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":238 */ - __pyx_6 = PyBytes_FromStringAndSize(__pyx_k23,4); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP_ADDR_MCAST_LOCAL, __pyx_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; goto __pyx_L1;} - Py_DECREF(__pyx_6); __pyx_6 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":320 */ - __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_n_IP_TOS_DEFAULT); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;} - __pyx_k24 = __pyx_4; - __pyx_4 = 0; - __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_n_IP_HDR_LEN); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;} - __pyx_k25 = __pyx_5; - __pyx_5 = 0; - __pyx_6 = PyLong_FromLong(0); if (!__pyx_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;} - __pyx_k26 = __pyx_6; - __pyx_6 = 0; - __pyx_7 = PyLong_FromLong(0); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; goto __pyx_L1;} - __pyx_k27 = __pyx_7; - __pyx_7 = 0; - __pyx_8 = __Pyx_GetName(__pyx_m, __pyx_n_IP_TTL_DEFAULT); if (!__pyx_8) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;} - __pyx_k28 = __pyx_8; - __pyx_8 = 0; - __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_n_IP_PROTO_IP); if (!__pyx_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; goto __pyx_L1;} - __pyx_k29 = __pyx_9; - __pyx_9 = 0; - __pyx_10 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_ANY); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; goto __pyx_L1;} - __pyx_k30 = __pyx_10; - __pyx_10 = 0; - __pyx_11 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_ANY); if (!__pyx_11) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; goto __pyx_L1;} - __pyx_k31 = __pyx_11; - __pyx_11 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":355 */ - __pyx_12 = PyLong_FromLong(16); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_ADDR_LEN, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":356 */ - __pyx_12 = PyLong_FromLong(128); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_ADDR_BITS, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":358 */ - __pyx_12 = PyLong_FromLong(40); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_HDR_LEN, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":359 */ - __pyx_12 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_HDR_LEN); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_LEN_MIN, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":360 */ - __pyx_12 = PyLong_FromLong(65535); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_LEN_MAX, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":362 */ - __pyx_12 = PyLong_FromLong(1280); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_MTU_MIN, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 362; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":364 */ - __pyx_12 = PyLong_FromLong(64); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_HLIM_DEFAULT, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":365 */ - __pyx_12 = PyLong_FromLong(255); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_HLIM_MAX, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 365; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":367 */ - __pyx_12 = PyBytes_FromStringAndSize(__pyx_k32,16); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_ADDR_UNSPEC, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 367; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":368 */ - __pyx_12 = PyBytes_FromStringAndSize(__pyx_k33,16); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_IP6_ADDR_LOOPBACK, __pyx_12) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; goto __pyx_L1;} - Py_DECREF(__pyx_12); __pyx_12 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":395 */ - __pyx_12 = PyLong_FromLong(0); if (!__pyx_12) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; goto __pyx_L1;} - __pyx_k34 = __pyx_12; - __pyx_12 = 0; - __pyx_13 = PyLong_FromLong(0); if (!__pyx_13) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; goto __pyx_L1;} - __pyx_k35 = __pyx_13; - __pyx_13 = 0; - __pyx_14 = PyLong_FromLong(0); if (!__pyx_14) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; goto __pyx_L1;} - __pyx_k36 = __pyx_14; - __pyx_14 = 0; - __pyx_15 = __Pyx_GetName(__pyx_m, __pyx_n_IP_PROTO_IPV6); if (!__pyx_15) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; goto __pyx_L1;} - __pyx_k37 = __pyx_15; - __pyx_15 = 0; - __pyx_16 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_HLIM_DEFAULT); if (!__pyx_16) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; goto __pyx_L1;} - __pyx_k38 = __pyx_16; - __pyx_16 = 0; - __pyx_17 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_ADDR_UNSPEC); if (!__pyx_17) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;} - __pyx_k39 = __pyx_17; - __pyx_17 = 0; - __pyx_18 = __Pyx_GetName(__pyx_m, __pyx_n_IP6_ADDR_UNSPEC); if (!__pyx_18) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 396; goto __pyx_L1;} - __pyx_k40 = __pyx_18; - __pyx_18 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":431 */ - __pyx_19 = PyLong_FromLong(0); if (!__pyx_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ADDR_TYPE_NONE, __pyx_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 431; goto __pyx_L1;} - Py_DECREF(__pyx_19); __pyx_19 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":432 */ - __pyx_19 = PyLong_FromLong(1); if (!__pyx_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ADDR_TYPE_ETH, __pyx_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 432; goto __pyx_L1;} - Py_DECREF(__pyx_19); __pyx_19 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":433 */ - __pyx_19 = PyLong_FromLong(2); if (!__pyx_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ADDR_TYPE_IP, __pyx_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 433; goto __pyx_L1;} - Py_DECREF(__pyx_19); __pyx_19 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":434 */ - __pyx_19 = PyLong_FromLong(3); if (!__pyx_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ADDR_TYPE_IP6, __pyx_19) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; goto __pyx_L1;} - Py_DECREF(__pyx_19); __pyx_19 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":444 */ - Py_INCREF(Py_None); - __pyx_k41 = Py_None; - __pyx_19 = __Pyx_GetName(__pyx_m, __pyx_n_ADDR_TYPE_NONE); if (!__pyx_19) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 444; goto __pyx_L1;} - __pyx_k42 = __pyx_19; - __pyx_19 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":666 */ - __pyx_20 = PyLong_FromLong(8); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_HDR_LEN, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 666; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":667 */ - __pyx_20 = PyLong_FromLong(20); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_ETHIP_LEN, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 667; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":669 */ - __pyx_20 = PyLong_FromLong(1); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_HRD_ETH, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 669; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":670 */ - __pyx_20 = PyLong_FromLong(6); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_HRD_IEEE802, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":672 */ - __pyx_20 = PyLong_FromLong(2048); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_PRO_IP, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":674 */ - __pyx_20 = PyLong_FromLong(1); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_OP_REQUEST, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 674; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":675 */ - __pyx_20 = PyLong_FromLong(2); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_OP_REPLY, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 675; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":676 */ - __pyx_20 = PyLong_FromLong(3); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_OP_REVREQUEST, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 676; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":677 */ - __pyx_20 = PyLong_FromLong(4); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_ARP_OP_REVREPLY, __pyx_20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 677; goto __pyx_L1;} - Py_DECREF(__pyx_20); __pyx_20 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":738 */ - Py_INCREF(Py_None); - __pyx_k43 = Py_None; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":760 */ - __pyx_20 = __Pyx_GetName(__pyx_m, __pyx_n_ARP_OP_REQUEST); if (!__pyx_20) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 760; goto __pyx_L1;} - __pyx_k44 = __pyx_20; - __pyx_20 = 0; - __pyx_21 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_UNSPEC); if (!__pyx_21) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; goto __pyx_L1;} - __pyx_k45 = __pyx_21; - __pyx_21 = 0; - __pyx_22 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_ANY); if (!__pyx_22) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 761; goto __pyx_L1;} - __pyx_k46 = __pyx_22; - __pyx_22 = 0; - __pyx_23 = __Pyx_GetName(__pyx_m, __pyx_n_ETH_ADDR_UNSPEC); if (!__pyx_23) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; goto __pyx_L1;} - __pyx_k47 = __pyx_23; - __pyx_23 = 0; - __pyx_24 = __Pyx_GetName(__pyx_m, __pyx_n_IP_ADDR_ANY); if (!__pyx_24) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 762; goto __pyx_L1;} - __pyx_k48 = __pyx_24; - __pyx_24 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":806 */ - __pyx_25 = PyLong_FromLong(20); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_HDR_LEN, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 806; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":808 */ - __pyx_25 = PyLong_FromLong(1); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_FIN, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 808; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":809 */ - __pyx_25 = PyLong_FromLong(2); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_SYN, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 809; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":810 */ - __pyx_25 = PyLong_FromLong(4); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_RST, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 810; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":811 */ - __pyx_25 = PyLong_FromLong(8); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_PUSH, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 811; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":812 */ - __pyx_25 = PyLong_FromLong(16); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_ACK, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 812; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":813 */ - __pyx_25 = PyLong_FromLong(32); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_URG, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 813; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":814 */ - __pyx_25 = PyLong_FromLong(64); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_ECE, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 814; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":815 */ - __pyx_25 = PyLong_FromLong(128); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TH_CWR, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 815; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":817 */ - __pyx_25 = PyLong_FromLong(65535); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_PORT_MAX, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 817; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":818 */ - __pyx_25 = PyLong_FromLong(65535); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_WIN_MAX, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 818; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":820 */ - __pyx_25 = PyLong_FromLong(0); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_EOL, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 820; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":821 */ - __pyx_25 = PyLong_FromLong(1); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 821; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_NOP, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 821; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":822 */ - __pyx_25 = PyLong_FromLong(2); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_MSS, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 822; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":823 */ - __pyx_25 = PyLong_FromLong(3); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_WSCALE, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 823; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":824 */ - __pyx_25 = PyLong_FromLong(4); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SACKOK, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 824; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":825 */ - __pyx_25 = PyLong_FromLong(5); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 825; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SACK, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 825; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":826 */ - __pyx_25 = PyLong_FromLong(6); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 826; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_ECHO, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 826; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":827 */ - __pyx_25 = PyLong_FromLong(7); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_ECHOREPLY, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 827; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":828 */ - __pyx_25 = PyLong_FromLong(8); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_TIMESTAMP, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 828; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":829 */ - __pyx_25 = PyLong_FromLong(9); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_POCONN, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 829; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":830 */ - __pyx_25 = PyLong_FromLong(10); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_POSVC, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 830; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":831 */ - __pyx_25 = PyLong_FromLong(11); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_CC, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 831; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":832 */ - __pyx_25 = PyLong_FromLong(12); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_CCNEW, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 832; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":833 */ - __pyx_25 = PyLong_FromLong(13); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_CCECHO, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 833; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":834 */ - __pyx_25 = PyLong_FromLong(14); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_ALTSUM, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 834; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":835 */ - __pyx_25 = PyLong_FromLong(15); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_ALTSUMDATA, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 835; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":836 */ - __pyx_25 = PyLong_FromLong(16); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SKEETER, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 836; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":837 */ - __pyx_25 = PyLong_FromLong(17); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_BUBBA, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 837; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":838 */ - __pyx_25 = PyLong_FromLong(18); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_TRAILSUM, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 838; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":839 */ - __pyx_25 = PyLong_FromLong(19); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_MD5, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 839; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":840 */ - __pyx_25 = PyLong_FromLong(20); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SCPS, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 840; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":841 */ - __pyx_25 = PyLong_FromLong(21); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SNACK, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 841; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":842 */ - __pyx_25 = PyLong_FromLong(22); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_REC, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 842; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":843 */ - __pyx_25 = PyLong_FromLong(23); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_CORRUPT, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 843; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":844 */ - __pyx_25 = PyLong_FromLong(24); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_SNAP, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 844; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":845 */ - __pyx_25 = PyLong_FromLong(26); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 845; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_TCPCOMP, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 845; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":846 */ - __pyx_25 = PyLong_FromLong(27); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 846; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_TCP_OPT_MAX, __pyx_25) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 846; goto __pyx_L1;} - Py_DECREF(__pyx_25); __pyx_25 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":848 */ - __pyx_25 = PyLong_FromLong(1); if (!__pyx_25) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; goto __pyx_L1;} - __pyx_k49 = __pyx_25; - __pyx_25 = 0; - __pyx_26 = PyLong_FromLong(0); if (!__pyx_26) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; goto __pyx_L1;} - __pyx_k50 = __pyx_26; - __pyx_26 = 0; - __pyx_27 = __Pyx_GetName(__pyx_m, __pyx_n_TH_SYN); if (!__pyx_27) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 848; goto __pyx_L1;} - __pyx_k51 = __pyx_27; - __pyx_27 = 0; - __pyx_28 = __Pyx_GetName(__pyx_m, __pyx_n_TCP_WIN_MAX); if (!__pyx_28) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; goto __pyx_L1;} - __pyx_k52 = __pyx_28; - __pyx_28 = 0; - __pyx_29 = PyLong_FromLong(0); if (!__pyx_29) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 849; goto __pyx_L1;} - __pyx_k53 = __pyx_29; - __pyx_29 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":871 */ - __pyx_30 = PyLong_FromLong(8); if (!__pyx_30) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_UDP_HDR_LEN, __pyx_30) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 871; goto __pyx_L1;} - Py_DECREF(__pyx_30); __pyx_30 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":872 */ - __pyx_30 = PyLong_FromLong(65535); if (!__pyx_30) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_UDP_PORT_MAX, __pyx_30) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 872; goto __pyx_L1;} - Py_DECREF(__pyx_30); __pyx_30 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":874 */ - __pyx_30 = __Pyx_GetName(__pyx_m, __pyx_n_UDP_HDR_LEN); if (!__pyx_30) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 874; goto __pyx_L1;} - __pyx_k54 = __pyx_30; - __pyx_30 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":913 */ - __pyx_31 = PyLong_FromLong(1); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_TYPE_OTHER, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 913; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":914 */ - __pyx_31 = PyLong_FromLong(6); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_TYPE_ETH, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 914; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":915 */ - __pyx_31 = PyLong_FromLong(24); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_TYPE_LOOPBACK, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 915; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":916 */ - __pyx_31 = PyLong_FromLong(53); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_TYPE_TUN, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 916; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":918 */ - __pyx_31 = PyLong_FromLong(1); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_UP, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 918; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":919 */ - __pyx_31 = PyLong_FromLong(2); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_LOOPBACK, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 919; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":920 */ - __pyx_31 = PyLong_FromLong(4); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_POINTOPOINT, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 920; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":921 */ - __pyx_31 = PyLong_FromLong(8); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_NOARP, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 921; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":922 */ - __pyx_31 = PyLong_FromLong(16); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_BROADCAST, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 922; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":923 */ - __pyx_31 = PyLong_FromLong(32); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_INTF_FLAG_MULTICAST, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 923; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1038 */ - Py_INCREF(Py_None); - __pyx_k55 = Py_None; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1137 */ - Py_INCREF(Py_None); - __pyx_k56 = Py_None; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1183 */ - __pyx_31 = PyLong_FromLong(1); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1183; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_FW_OP_ALLOW, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1183; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1184 */ - __pyx_31 = PyLong_FromLong(2); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_FW_OP_BLOCK, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1184; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1186 */ - __pyx_31 = PyLong_FromLong(1); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_FW_DIR_IN, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1186; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1187 */ - __pyx_31 = PyLong_FromLong(2); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} - if (PyObject_SetAttr(__pyx_m, __pyx_n_FW_DIR_OUT, __pyx_31) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1187; goto __pyx_L1;} - Py_DECREF(__pyx_31); __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1273 */ - Py_INCREF(Py_None); - __pyx_k57 = Py_None; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1371 */ - Py_INCREF(Py_None); - __pyx_k58 = Py_None; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1490 */ - __pyx_31 = PyLong_FromLong(1500); if (!__pyx_31) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1490; goto __pyx_L1;} - __pyx_k59 = __pyx_31; - __pyx_31 = 0; - - /* "/Users/dugsong/projects/libdnet/python/dnet.pyx":1531 */ - return __pyx_m; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_2); - Py_XDECREF(__pyx_3); - Py_XDECREF(__pyx_4); - Py_XDECREF(__pyx_5); - Py_XDECREF(__pyx_6); - Py_XDECREF(__pyx_7); - Py_XDECREF(__pyx_8); - Py_XDECREF(__pyx_9); - Py_XDECREF(__pyx_10); - Py_XDECREF(__pyx_11); - Py_XDECREF(__pyx_12); - Py_XDECREF(__pyx_13); - Py_XDECREF(__pyx_14); - Py_XDECREF(__pyx_15); - Py_XDECREF(__pyx_16); - Py_XDECREF(__pyx_17); - Py_XDECREF(__pyx_18); - Py_XDECREF(__pyx_19); - Py_XDECREF(__pyx_20); - Py_XDECREF(__pyx_21); - Py_XDECREF(__pyx_22); - Py_XDECREF(__pyx_23); - Py_XDECREF(__pyx_24); - Py_XDECREF(__pyx_25); - Py_XDECREF(__pyx_26); - Py_XDECREF(__pyx_27); - Py_XDECREF(__pyx_28); - Py_XDECREF(__pyx_29); - Py_XDECREF(__pyx_30); - Py_XDECREF(__pyx_31); - __Pyx_AddTraceback("dnet"); - return NULL; +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); } -static char *__pyx_filenames[] = { - "dnet.pyx", -}; +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } -/* Runtime support code */ +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned long), + little, !is_unsigned); + } +} -static void __pyx_init_filenames(void) { - __pyx_f = __pyx_filenames; +/* CIntFromPy */ +static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(unsigned long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned long) 0; + case 1: __PYX_VERIFY_RETURN_INT(unsigned long, digit, digits[0]) + case 2: + if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT) { + return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT) { + return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) >= 4 * PyLong_SHIFT) { + return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(unsigned long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned long) 0; + case -1: __PYX_VERIFY_RETURN_INT(unsigned long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(unsigned long, digit, +digits[0]) + case -2: + if (8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) { + return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(unsigned long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) { + return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) { + return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) { + return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT) { + return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT) { + return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(unsigned long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + unsigned long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (unsigned long) -1; + } + } else { + unsigned long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned long) -1; + val = __Pyx_PyInt_As_unsigned_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned long"); + return (unsigned long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long) -1; } -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); - return 0; +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; } - if ((none_allowed && obj == Py_None) || PyObject_TypeCheck(obj, type)) - return 1; - PyErr_Format(PyExc_TypeError, - "Argument '%s' has incorrect type (expected %s, got %s)", - name, type->tp_name, obj->ob_type->tp_name); - return 0; +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; } -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) { - PyObject *result; - result = PyObject_GetAttr(dict, name); - if (!result) - PyErr_SetObject(PyExc_NameError, name); - return result; +/* CIntFromPy */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(unsigned int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned int) 0; + case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0]) + case 2: + if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT) { + return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT) { + return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT) { + return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(unsigned int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned int) 0; + case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, +digits[0]) + case -2: + if (8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { + return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(unsigned int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + unsigned int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (unsigned int) -1; + } + } else { + unsigned int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned int) -1; + val = __Pyx_PyInt_As_unsigned_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned int"); + return (unsigned int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned int"); + return (unsigned int) -1; } -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) { - Py_XINCREF(type); - Py_XINCREF(value); - Py_XINCREF(tb); - /* First, check the traceback argument, replacing None with NULL. */ - if (tb == Py_None) { - Py_DECREF(tb); - tb = 0; +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; } - else if (tb != NULL && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } } - /* Next, replace a missing value with None */ - if (value == NULL) { - value = Py_None; - Py_INCREF(value); + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); } - /* Next, repeatedly, replace a tuple exception with its first item */ - while (PyTuple_Check(type) && PyTuple_Size(type) > 0) { - PyObject *tmp = type; - type = PyTuple_GET_ITEM(type, 0); - Py_INCREF(type); +} + +/* CIntFromPy */ +static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(unsigned short) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(unsigned short, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned short) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned short) 0; + case 1: __PYX_VERIFY_RETURN_INT(unsigned short, digit, digits[0]) + case 2: + if (8 * sizeof(unsigned short) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) >= 2 * PyLong_SHIFT) { + return (unsigned short) (((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(unsigned short) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) >= 3 * PyLong_SHIFT) { + return (unsigned short) (((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(unsigned short) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) >= 4 * PyLong_SHIFT) { + return (unsigned short) (((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned short) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(unsigned short) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned short) 0; + case -1: __PYX_VERIFY_RETURN_INT(unsigned short, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(unsigned short, digit, +digits[0]) + case -2: + if (8 * sizeof(unsigned short) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) { + return (unsigned short) (((unsigned short)-1)*(((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(unsigned short) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) { + return (unsigned short) ((((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) { + return (unsigned short) (((unsigned short)-1)*(((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(unsigned short) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) { + return (unsigned short) ((((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 4 * PyLong_SHIFT) { + return (unsigned short) (((unsigned short)-1)*(((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(unsigned short) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned short) - 1 > 4 * PyLong_SHIFT) { + return (unsigned short) ((((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + } + } + break; + } +#endif + if (sizeof(unsigned short) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + unsigned short val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (unsigned short) -1; + } + } else { + unsigned short val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned short) -1; + val = __Pyx_PyInt_As_unsigned_short(tmp); Py_DECREF(tmp); + return val; } - if (PyBytes_CheckExact(type)) { - /* Raising builtin string is deprecated but still allowed -- - * do nothing. Raising an instance of a new-style str - * subclass is right out. */ - if (PyErr_Warn(PyExc_DeprecationWarning, - "raising a string exception is deprecated")) - goto raise_error; - } - // FIXME - // else if (PyType_Check(type) || PyClass_Check(type)) - // ; /* PyErr_NormalizeException(&type, &value, &tb); */ - // else if (PyInstance_Check(type)) { - // /* Raising an instance. The value should be a dummy. */ - // if (value != Py_None) { - // PyErr_SetString(PyExc_TypeError, - // "instance exception may not have a separate value"); - // goto raise_error; - // } - // else { - // /* Normalize to raise , */ - // Py_DECREF(value); - // value = type; - // type = (PyObject*) ((PyInstanceObject*)type)->in_class; - // Py_INCREF(type); - // } - // } - // else if (PyType_IsSubtype(type->ob_type, (PyTypeObject*)PyExc_Exception)) { - // /* Raising a new-style object (in Py2.5). - // The value should be a dummy. */ - // if (value != Py_None) { - // PyErr_SetString(PyExc_TypeError, - // "instance exception may not have a separate value"); - // goto raise_error; - // } - // else { - // /* Normalize to raise , */ - // Py_DECREF(value); - // value = type; - // type = (PyObject*) type->ob_type; - // Py_INCREF(type); - // } - // } - else { - /* Not something you can raise. You get an exception - anyway, just not what you specified :-) */ - PyErr_Format(PyExc_TypeError, - "exceptions must be classes, instances, or " - "strings (deprecated), not %s", - type->ob_type->tp_name); - goto raise_error; - } - PyErr_Restore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned short"); + return (unsigned short) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned short"); + return (unsigned short) -1; } -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); - return 0; +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned short) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned short) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned short) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned short), + little, !is_unsigned); } - if (obj == Py_None || PyObject_TypeCheck(obj, type)) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", - obj->ob_type->tp_name, type->tp_name); - return 0; } -static void __Pyx_UnpackError(void) { - PyErr_SetString(PyExc_ValueError, "unpack sequence of wrong size"); +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned int), + little, !is_unsigned); + } } -static PyObject *__Pyx_UnpackItem(PyObject *seq, Py_ssize_t i) { - PyObject *item; - if (!(item = PySequence_GetItem(seq, i))) { - if (PyErr_ExceptionMatches(PyExc_IndexError)) - __Pyx_UnpackError(); - } - return item; +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const long neg_one = (long) -1, const_zero = (long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } } -static int __Pyx_EndUnpack(PyObject *seq, Py_ssize_t i) { - PyObject *item; - if (item = PySequence_GetItem(seq, i)) { - Py_DECREF(item); - __Pyx_UnpackError(); - return -1; - } - PyErr_Clear(); +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { - *t->p = PyUnicode_InternFromString(t->s); - if (!*t->p) - return -1; - ++t; +/* CheckBinaryVersion */ +static int __Pyx_check_binary_version(void) { + char ctversion[4], rtversion[4]; + PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); + PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); + if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { + char message[200]; + PyOS_snprintf(message, sizeof(message), + "compiletime version %s of module '%.100s' " + "does not match runtime version %s", + ctversion, __Pyx_MODULE_NAME, rtversion); + return PyErr_WarnEx(NULL, message, 1); } return 0; } +/* InitStrings */ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { while (t->p) { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif if (!*t->p) return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; ++t; } return 0; } -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(char *funcname) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyObject *empty_tuple = 0; - PyObject *empty_string = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - py_srcfile = PyBytes_FromString(__pyx_filename); - if (!py_srcfile) goto bad; - py_funcname = PyBytes_FromString(funcname); - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - empty_tuple = PyTuple_New(0); - if (!empty_tuple) goto bad; - empty_string = PyBytes_FromString(""); - if (!empty_string) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - 0, /*int kwonlyargcount*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - empty_string, /*PyObject *code,*/ - empty_tuple, /*PyObject *consts,*/ - empty_tuple, /*PyObject *names,*/ - empty_tuple, /*PyObject *varnames,*/ - empty_tuple, /*PyObject *freevars,*/ - empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - empty_string /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_Get(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(empty_tuple); - Py_XDECREF(empty_string); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; } +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { + if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { + return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); +#if PY_MAJOR_VERSION < 3 + } else if (likely(PyInt_CheckExact(o))) { + return PyInt_AS_LONG(o); +#endif + } else { + Py_ssize_t ival; + PyObject *x; + x = PyNumber_Index(o); + if (!x) return -1; + ival = PyInt_AsLong(x); + Py_DECREF(x); + return ival; + } +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ diff --git a/python/dnet.pyx b/python/dnet.pyx index 7c959f10..d9cbc90f 100644 --- a/python/dnet.pyx +++ b/python/dnet.pyx @@ -13,10 +13,10 @@ and raw IP packet and Ethernet frame transmission. """ __author__ = 'Oliver Falk ' -__copyright__ = 'Copyright (c) 2019 Oliver Falk' +__copyright__ = 'Copyright (c) 2022 Oliver Falk' __license__ = 'BSD' __url__ = 'https://github.com/ofalk/libdnet' -__version__ = '1.14' +__version__ = '1.16' cdef extern from "dnet.h": @@ -37,10 +37,12 @@ cdef extern from *: void *memcpy(char *dst, char *src, int len) void *memset(char *b, int c, int len) char *strerror(int errnum) - int strlcpy(char *dst, char *src, int size) unsigned long htonl(unsigned long n) unsigned long ntohl(unsigned long n) +cdef extern from "string.h": + int strlcpy(char *dst, char *src, int size) + cdef __memcpy(char *dst, object src, int n): if PyBytes_Size(src) != n: raise ValueError, "not a %d-byte binary string: %r" % (n, src) diff --git a/python/test.py b/python/test.py index f229457e..a9f77aa1 100755 --- a/python/test.py +++ b/python/test.py @@ -1,8 +1,11 @@ #!/usr/bin/env python import sys, unittest +from os import listdir from interfacefinder import mac_addr,local_ip,loopback_intf -sys.path.insert(0, './build') +for dir in listdir('build'): + if dir.startswith('lib.'): + sys.path.insert(0, "build/" + dir) import dnet class AddrTestCase(unittest.TestCase):