#pragma once

#define TIPASTE(x,y) x ## y

#define IF_LIST_ITER(n) \
    PLIST_ENTRY TIPASTE(n,Entry); \
    PIP_INTERFACE n;

#define ForEachInterface(n) \
    TIPASTE(n,Entry) = InterfaceListHead.Flink; \
    while (TIPASTE(n,Entry) != &InterfaceListHead) { \
              TI_DbgPrint \
                  (MAX_TRACE,( # n ": %x\n", \
                               TIPASTE(n,Entry))); \
              ASSERT(TIPASTE(n,Entry)); \
	      n = CONTAINING_RECORD(TIPASTE(n,Entry), IP_INTERFACE, \
				    ListEntry); \
	      ASSERT(n);

#define EndFor(n) \
     TI_DbgPrint(MAX_TRACE,("Next " # n " %x\n",  \
			    TIPASTE(n,Entry->Flink))); \
     TIPASTE(n,Entry) = TIPASTE(n,Entry)->Flink; \
}