PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/verify/src/Checked/Libraries/NetStack2/NetDrivers/FilterAdapter.cs

#
C# | 133 lines | 102 code | 21 blank | 10 comment | 2 complexity | 3488518aefff5f8aa04aa866141bb74c MD5 | raw file
  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Microsoft Research Singularity / Netstack
  4. //
  5. // Copyright (c) Microsoft Corporation. All rights reserved.
  6. //
  7. #if false
  8. using System;
  9. using System.Collections;
  10. using System.Diagnostics;
  11. using System.Threading;
  12. using Microsoft.SingSharp;
  13. using Microsoft.Singularity;
  14. using Microsoft.Singularity.Channels;
  15. using Microsoft.Singularity.NetStack2;
  16. using Microsoft.Singularity.NetStack;
  17. using Microsoft.Singularity.NetStack.Common;
  18. using Microsoft.Singularity.NetStack.Runtime;
  19. using Drivers.Net;
  20. namespace Microsoft.Singularity.NetStack2.NetDrivers
  21. {
  22. public class FilterAdapter : IAdapter
  23. {
  24. IAdapter wrappedAdapter;
  25. private int txDroppedPackets;
  26. static ArrayList /*of TRef FilterEngineContract.Imp*/ filterEngineImpRefs =
  27. new ArrayList();
  28. public FilterAdapter(IAdapter wrappedAdapter)
  29. {
  30. this.wrappedAdapter = wrappedAdapter;
  31. this.txDroppedPackets = 0;
  32. }
  33. public static void AddFilterEngine(FilterEngineContract/*.Imp*/ imp)
  34. {
  35. filterEngineImpRefs.Add((imp));
  36. }
  37. public string DriverName
  38. {
  39. get { return wrappedAdapter.DriverName; }
  40. }
  41. public string DriverVersion
  42. {
  43. get { return wrappedAdapter.DriverVersion; }
  44. }
  45. public EthernetAddress HardwareAddress
  46. {
  47. get { return wrappedAdapter.HardwareAddress; }
  48. }
  49. public uint LinkSpeed
  50. {
  51. get { return wrappedAdapter.LinkSpeed; }
  52. }
  53. public string NicName
  54. {
  55. get { return wrappedAdapter.NicName; }
  56. }
  57. public bool ProcessIncomingPacket(Bytes data)
  58. {
  59. using (thisLock.Lock()) {
  60. foreach (FilterEngineContract/*.Imp*/ filterEngineImpRef in filterEngineImpRefs) {
  61. FilterEngineContract/*.Imp*/ filterEngineImp = filterEngineImpRef.Acquire();
  62. filterEngineImp.SendReceivedPacket(data);
  63. switch receive {
  64. case filterEngineImp.AcceptPacket(returnedHeader, returnedData):
  65. data = returnedData;
  66. //delete returnedHeader;
  67. break; /* Continue and see if another filter will reject it */
  68. case filterEngineImp.RejectPacket(returnedHeader, returnedData):
  69. data = returnedData;
  70. //delete returnedHeader;
  71. return false;
  72. case filterEngineImp.ModifyPacket(returnedHeader, returnedData):
  73. data = returnedData;
  74. //delete returnedHeader;
  75. break;
  76. }
  77. filterEngineImpRef.Release(filterEngineImp);
  78. }
  79. }
  80. return true;
  81. }
  82. public void PopulateTxRing(Bytes header, Bytes data)
  83. {
  84. using (thisLock.Lock()) {
  85. // Process each sent packet and pass on the filtered versions.
  86. foreach (FilterEngineContract/*.Imp*/ filterEngineImpRef in filterEngineImpRefs) {
  87. FilterEngineContract/*.Imp*/ filterEngineImp = filterEngineImpRef.Acquire();
  88. filterEngineImp.SendSendingPacket(header, data);
  89. switch receive {
  90. case filterEngineImp.AcceptPacket(returnedHeader, returnedData):
  91. header = returnedHeader;
  92. data = returnedData;
  93. wrappedAdapter.PopulateTxRing(header, data);
  94. break;
  95. case filterEngineImp.RejectPacket(returnedHeader, returnedData):
  96. header = returnedHeader;
  97. data = returnedData;
  98. txDroppedPackets++;
  99. break;
  100. case filterEngineImp.ModifyPacket(returnedHeader, returnedData):
  101. header = returnedHeader;
  102. data = returnedData;
  103. wrappedAdapter.PopulateTxRing(header, data);
  104. break;
  105. }
  106. filterEngineImpRef.Release(filterEngineImp);
  107. }
  108. }
  109. }
  110. }
  111. }
  112. #endif