// Currently, the interface constrains the total number of output subsystems // to a limit of 32. import "wtypes.idl"; [ version(0.1), uuid(A4916A26-1051-11d1-BFC4-00C04FBBDEC1), pointer_default(unique) ] interface BridgeAdmin { typedef enum BRIDGE_OUTPUT_STATE { BRIDGE_OUTPUT_STATE_UNLOADED, BRIDGE_OUTPUT_STATE_RUNNING } BRIDGE_OUTPUT_STATE; typedef enum BRIDGE_BANDWIDTH_POLICY { BRIDGE_BANDWIDTH_POLICY_GUARANTEED, BRIDGE_BANDWIDTH_POLICY_OPPORTUNISTIC, BRIDGE_BANDWIDTH_POLICY_REGULATED } BRIDGE_BANDWIDTH_POLICY; typedef DWORD BRIDGE_IP4ADDR; // global configuration parameters typedef struct BRIDGE_CONFIG { DWORD WorkerThreads; } BRIDGE_CONFIG; typedef struct BRIDGE_STATISTICS { DWORD PacketsReceived; DWORD PacketsReceivedMulticast; DWORD PacketsReceivedTunnel; DWORD PacketsForwarded; } BRIDGE_STATISTICS; typedef struct BRIDGE_OUTPUT_STATISTICS { DWORD PacketsForwarded; DWORDLONG BytesForwarded; DWORD PacketOverflows; DWORD InterfaceFailures; DWORD LastBitsPerSecond; } BRIDGE_OUTPUT_STATISTICS; typedef struct BRIDGE_OUTPUT_CONFIG { LPWSTR DisplayName; LPWSTR DllFilename; DWORD MaxBandwidth; // in bits/sec DWORD MinOpportunisticBandwidth; // in bits/sec } BRIDGE_OUTPUT_CONFIG; typedef enum BRIDGE_OUTPUT_VALUE_TYPE { BRIDGE_OUTPUT_VALUE_STRING, BRIDGE_OUTPUT_VALUE_DWORD, BRIDGE_OUTPUT_VALUE_IP4ADDR, BRIDGE_OUTPUT_VALUE_BOOLEAN } BRIDGE_OUTPUT_VALUE_TYPE; typedef struct BRIDGE_OUTPUT_VALUE { DWORD Index; LPWSTR Name; union BRIDGE_OUTPUT_VALUE_DATA switch (BRIDGE_OUTPUT_VALUE_TYPE Type) { case BRIDGE_OUTPUT_VALUE_STRING: // LPWSTR String; DWORD StringIgnore; case BRIDGE_OUTPUT_VALUE_DWORD: DWORD Dword; case BRIDGE_OUTPUT_VALUE_IP4ADDR: BRIDGE_IP4ADDR IPAddress; case BRIDGE_OUTPUT_VALUE_BOOLEAN: BOOL Boolean; } Data; LPWSTR String; } BRIDGE_OUTPUT_VALUE; typedef struct BRIDGE_OUTPUT_INFO { DWORD OutputID; BRIDGE_OUTPUT_STATISTICS Statistics; BRIDGE_OUTPUT_CONFIG Config; BRIDGE_OUTPUT_STATE State; HRESULT Status; } BRIDGE_OUTPUT_INFO; typedef struct BRIDGE_ROUTE_RECORD { BRIDGE_IP4ADDR Address; BRIDGE_IP4ADDR Netmask; DWORD OutputMask; DWORD TotalMatches; DWORD ReservationID; DWORD LastBitRate; } BRIDGE_ROUTE_RECORD, *PBRIDGE_ROUTE_RECORD; typedef struct BRIDGE_RESERVATION { DWORD ReservationID; DWORD SubsystemID; BRIDGE_BANDWIDTH_POLICY BandwidthPolicy; DWORD BitsPerSecond; LPWSTR DisplayName; } BRIDGE_RESERVATION; typedef BRIDGE_ROUTE_RECORD * BRIDGE_ROUTE_RECORD_LIST; // ------------------------------------------------------------------------------ // test to see if RPC server is listening HRESULT BridgePing (void); HRESULT BridgeGetVersion ( [out] DWORD * version); HRESULT BridgeGetConfig ( [out] BRIDGE_CONFIG *); HRESULT BridgeSetConfig ( [in] BRIDGE_CONFIG *); // output subsystem functions ----------------------------------------------------- HRESULT BridgeOutputAdd ( [out] DWORD * output_id, [in] BRIDGE_OUTPUT_CONFIG * config); HRESULT BridgeOutputDelete ( [in] DWORD output_id); HRESULT BridgeOutputModify ( [in] DWORD output_id, [in] BRIDGE_OUTPUT_CONFIG * config); HRESULT BridgeOutputGetConfig ( [in] DWORD output_id, [out] BRIDGE_OUTPUT_CONFIG * config); HRESULT BridgeOutputGetInfo ( [in] DWORD output_id, [out] BRIDGE_OUTPUT_INFO * info); HRESULT BridgeOutputSetState ( [in] DWORD output_id, [in] BRIDGE_OUTPUT_STATE state); HRESULT BridgeOutputEnum ( [out] DWORD * length, [out, size_is (,*length)] BRIDGE_OUTPUT_INFO ** array); HRESULT BridgeOutputGetValue ( [in] DWORD output_id, [in] DWORD index, [out] BRIDGE_OUTPUT_VALUE * value); HRESULT BridgeOutputSetValue ( [in] DWORD output_id, [in] BRIDGE_OUTPUT_VALUE * value); HRESULT BridgeOutputEnumValue ( [in] DWORD output_id, [out] DWORD * length, [out, size_is (,*length)] BRIDGE_OUTPUT_VALUE ** array); // routing interface ------------------------------------------------------- HRESULT BridgeRouteAdd ( [in] BRIDGE_ROUTE_RECORD * route); HRESULT BridgeRouteDelete ( [in] BRIDGE_IP4ADDR address, [in] BRIDGE_IP4ADDR mask); HRESULT BridgeRouteModify ( [in] BRIDGE_IP4ADDR address, [in] BRIDGE_IP4ADDR mask, [in] DWORD subsystem_mask); HRESULT BridgeRouteEnum ( [out] DWORD * length, [out, size_is (,*length)] BRIDGE_ROUTE_RECORD ** array); HRESULT BridgeRouteLookup ( [in] BRIDGE_IP4ADDR address, [in] BRIDGE_IP4ADDR netmask, [out] BRIDGE_ROUTE_RECORD * route); HRESULT BridgeInterfaceEnum ( [out] DWORD * length, [out, size_is (,*length)] BRIDGE_IP4ADDR ** array); // reservation functions ---------------------------------------------------- HRESULT BridgeResvAdd ( [in] BRIDGE_RESERVATION * resv, [out] DWORD * resv_id); HRESULT BridgeResvDelete ( [in] DWORD resv_id); HRESULT BridgeResvLookup ( [in] DWORD resv_id, [out] BRIDGE_RESERVATION * resv); HRESULT BridgeResvEnum ( [out] DWORD * length, [out, size_is(,*length)] BRIDGE_RESERVATION ** array); }