Skip to content

Commit 58c8a12

Browse files
committed
FEAT: append several peer
1 parent f03a10a commit 58c8a12

File tree

3 files changed

+65
-65
lines changed

3 files changed

+65
-65
lines changed

Example/Program.cs

Lines changed: 65 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,17 @@
1010

1111
namespace Example // Note: actual namespace depends on the project name.
1212
{
13-
13+
1414
internal class Program
1515
{
1616
private static Adapter? _adapter = null;
1717
private static Guid _adapterGuid;
1818
private static NET_LUID _adapterLuid;
1919

20-
private static Vanara.PInvoke.IpHlpApi.MIB_IPINTERFACE_ROW _IpInterfaceRow;
21-
private static Vanara.PInvoke.IpHlpApi.MIB_UNICASTIPADDRESS_ROW _unicastipaddressRow;
22-
private static Vanara.PInvoke.IpHlpApi.MIB_IPFORWARD_ROW2 _ipforwardRow2;
20+
2321

2422
private static WgConfig WgConfig = new WgConfig();
25-
23+
2624

2725
public static void AddArch()
2826
{
@@ -60,7 +58,7 @@ static void Main(string[] args)
6058
var configPath = "client.conf";
6159
var adapterName = "client";
6260
var tunnelType = "client";
63-
61+
6462
Parser.Default.ParseArguments<Options>(args)
6563
.WithParsed<Options>(o =>
6664
{
@@ -70,7 +68,7 @@ static void Main(string[] args)
7068
Console.WriteLine("1.0.0");
7169
return;
7270
}
73-
if(o.ConfigPath != null && !o.ConfigPath.Equals(""))
71+
if (o.ConfigPath != null && !o.ConfigPath.Equals(""))
7472
{
7573
configPath = o.ConfigPath;
7674
}
@@ -91,15 +89,15 @@ static void Main(string[] args)
9189
var baseName = System.IO.Path.GetDirectoryName(Environment.ProcessPath);
9290
configPath = System.IO.Path.Combine(baseName, configPath);
9391
}
94-
92+
9593
if (!File.Exists(configPath))
9694
{
9795
Console.WriteLine("Not Found : Config File");
9896
return;
9997
}
100-
98+
10199
//Get Conf File
102-
100+
103101

104102
_adapterGuid = Guid.Parse("{0xdeadc001,0xbeef,0xbabe,{0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}}");
105103

@@ -118,7 +116,7 @@ static void Main(string[] args)
118116
var configAllLinesLine = File.ReadAllLines(configPath);
119117
_adapter.ParseConfFile(configAllLinesLine, out WgConfig);
120118

121-
119+
122120
MIB_IPFORWARD_TABLE2 table;
123121
lastError = Vanara.PInvoke.IpHlpApi.GetIpForwardTable2(Ws2_32.ADDRESS_FAMILY.AF_INET, out table);
124122
if (lastError.Failed)
@@ -136,39 +134,53 @@ static void Main(string[] args)
136134
Console.WriteLine("Start Delete Row [" + i + "] - Metric " + row.Metric);
137135
Vanara.PInvoke.IpHlpApi.DeleteIpForwardEntry2(ref table.Table[i]);
138136
}
139-
140-
}
141137

142-
//TODO: Endpoint Start
143-
Vanara.PInvoke.IpHlpApi.InitializeIpForwardEntry(out _ipforwardRow2);
144-
_ipforwardRow2.InterfaceLuid = _adapterLuid;
145-
_ipforwardRow2.NextHop.Ipv4.sin_addr = Ws2_32.IN_ADDR.INADDR_ANY;
146-
_ipforwardRow2.NextHop.si_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
147-
_ipforwardRow2.Metric = 0;
148-
_ipforwardRow2.Protocol = MIB_IPFORWARD_PROTO.MIB_IPPROTO_LOCAL;
149-
_ipforwardRow2.DestinationPrefix.Prefix.Ipv4.sin_addr = Ws2_32.IN_ADDR.INADDR_ANY;
150-
_ipforwardRow2.DestinationPrefix.Prefix.si_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
151-
152-
lastError = Vanara.PInvoke.IpHlpApi.CreateIpForwardEntry2(ref _ipforwardRow2);
153-
154-
if (lastError.Failed)
155-
{
156-
//Failed to set default route
157-
Console.WriteLine("CreateIpForwardEntry2 " + lastError.ToString());
158138
}
159-
else
139+
140+
for (var i = 0; i < WgConfig.LoctlWireGuardConfig.WgPeerConfigs.Length; i++)
160141
{
161-
Console.WriteLine("Set default route" + lastError.ToString());
142+
var peerConfig = WgConfig.LoctlWireGuardConfig.WgPeerConfigs[i];
143+
Vanara.PInvoke.IpHlpApi.MIB_IPFORWARD_ROW2 row;
144+
Vanara.PInvoke.IpHlpApi.InitializeIpForwardEntry(out row);
145+
row.InterfaceLuid = _adapterLuid;
146+
147+
row.Metric = 1;
148+
149+
var maskedIp = IPNetwork.Parse("" + peerConfig.allowdIp.V4.Addr, peerConfig.allowdIp.Cidr);
150+
151+
row.DestinationPrefix.Prefix.Ipv4.sin_addr = new Ws2_32.IN_ADDR(maskedIp.Network.GetAddressBytes());
152+
//row.DestinationPrefix.Prefix.Ipv4.sin_addr = Ws2_32.IN_ADDR.INADDR_ANY;
153+
row.DestinationPrefix.Prefix.si_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
154+
row.DestinationPrefix.PrefixLength = maskedIp.Cidr;
155+
156+
row.Protocol = MIB_IPFORWARD_PROTO.MIB_IPPROTO_LOCAL;
157+
row.NextHop.Ipv4.sin_addr = Ws2_32.IN_ADDR.INADDR_ANY;
158+
row.NextHop.si_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
159+
160+
lastError = Vanara.PInvoke.IpHlpApi.CreateIpForwardEntry2(ref row);
161+
if (lastError.Failed)
162+
{
163+
//Failed to set default route
164+
Console.WriteLine("CreateIpForwardEntry2 [" + i + "] " + lastError.ToString());
165+
}
166+
else
167+
{
168+
Console.WriteLine("Set default route [" + i + "] " + lastError.ToString());
169+
}
170+
162171
}
163172

164-
Vanara.PInvoke.IpHlpApi.InitializeUnicastIpAddressEntry(out _unicastipaddressRow);
165-
_unicastipaddressRow.InterfaceLuid = _adapterLuid;
166-
_unicastipaddressRow.Address.Ipv4.sin_addr = new Ws2_32.IN_ADDR(WgConfig.InterfaceAddress.GetAddressBytes());
167-
_unicastipaddressRow.Address.Ipv4.sin_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
168-
_unicastipaddressRow.OnLinkPrefixLength = WgConfig.InterfaceNetwork.Cidr;
169-
_unicastipaddressRow.DadState = NL_DAD_STATE.IpDadStatePreferred;
170173

171-
lastError = Vanara.PInvoke.IpHlpApi.CreateUnicastIpAddressEntry(ref _unicastipaddressRow);
174+
175+
Vanara.PInvoke.IpHlpApi.MIB_UNICASTIPADDRESS_ROW unicastipaddressRow;
176+
Vanara.PInvoke.IpHlpApi.InitializeUnicastIpAddressEntry(out unicastipaddressRow);
177+
unicastipaddressRow.InterfaceLuid = _adapterLuid;
178+
unicastipaddressRow.Address.Ipv4.sin_addr = new Ws2_32.IN_ADDR(WgConfig.InterfaceAddress.GetAddressBytes());
179+
unicastipaddressRow.Address.Ipv4.sin_family = Ws2_32.ADDRESS_FAMILY.AF_INET;
180+
unicastipaddressRow.OnLinkPrefixLength = WgConfig.InterfaceNetwork.Cidr;
181+
unicastipaddressRow.DadState = NL_DAD_STATE.IpDadStatePreferred;
182+
183+
lastError = Vanara.PInvoke.IpHlpApi.CreateUnicastIpAddressEntry(ref unicastipaddressRow);
172184
if (lastError.Failed)
173185
{
174186
//Failed to set IP address
@@ -178,12 +190,12 @@ static void Main(string[] args)
178190
{
179191
Console.WriteLine("Set Ip address " + lastError.ToString());
180192
}
193+
Vanara.PInvoke.IpHlpApi.MIB_IPINTERFACE_ROW IpInterfaceRow;
194+
Vanara.PInvoke.IpHlpApi.InitializeIpInterfaceEntry(out IpInterfaceRow);
195+
IpInterfaceRow.InterfaceLuid = _adapterLuid;
196+
IpInterfaceRow.Family = Ws2_32.ADDRESS_FAMILY.AF_INET;
181197

182-
Vanara.PInvoke.IpHlpApi.InitializeIpInterfaceEntry(out _IpInterfaceRow);
183-
_IpInterfaceRow.InterfaceLuid = _adapterLuid;
184-
_IpInterfaceRow.Family = Ws2_32.ADDRESS_FAMILY.AF_INET;
185-
186-
lastError = Vanara.PInvoke.IpHlpApi.GetIpInterfaceEntry(ref _IpInterfaceRow);
198+
lastError = Vanara.PInvoke.IpHlpApi.GetIpInterfaceEntry(ref IpInterfaceRow);
187199

188200
if (lastError.Failed)
189201
{
@@ -195,14 +207,14 @@ static void Main(string[] args)
195207
Console.WriteLine("Set Ip address " + lastError.ToString());
196208
}
197209

198-
_IpInterfaceRow.ForwardingEnabled = true;
210+
IpInterfaceRow.ForwardingEnabled = true;
211+
212+
IpInterfaceRow.UseAutomaticMetric = false;
213+
IpInterfaceRow.Metric = 0;
214+
IpInterfaceRow.NlMtu = WgConfig.InterfaceMtu;
215+
IpInterfaceRow.SitePrefixLength = 0;
199216

200-
_IpInterfaceRow.UseAutomaticMetric = false;
201-
_IpInterfaceRow.Metric = 0;
202-
_IpInterfaceRow.NlMtu = WgConfig.InterfaceMtu;
203-
_IpInterfaceRow.SitePrefixLength = 0;
204-
205-
lastError = Vanara.PInvoke.IpHlpApi.SetIpInterfaceEntry(_IpInterfaceRow);
217+
lastError = Vanara.PInvoke.IpHlpApi.SetIpInterfaceEntry(IpInterfaceRow);
206218

207219
if (lastError.Failed)
208220
{
@@ -218,7 +230,7 @@ static void Main(string[] args)
218230
{
219231
Process.Start("netsh.exe", String.Format("interface ipv4 add dnsservers name={0} address={1} validate=no", adapterName, dnsAddress));
220232
}
221-
233+
222234
_adapter.SetConfiguration(WgConfig);
223235
_adapter.SetStateUp();
224236

@@ -232,11 +244,11 @@ static void Main(string[] args)
232244
{
233245
rx += peer.RxBytes;
234246
tx += peer.TxBytes;
235-
247+
236248
}
237249
Console.WriteLine("rx :" + rx);
238250
Console.WriteLine("tx :" + tx);
239-
251+
240252
var state = _adapter.GetAdapterState();
241253
Console.WriteLine("state :" + state);
242254
Thread.Sleep(1000);

WireGuardNT-PInvoke/Adapter.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ public bool ParseConfFile(string[] lines, out WgConfig wgConfig )
118118

119119

120120
wgConfig.LoctlWireGuardConfig.WgPeerConfigs = new loctlWgPeerConfig[peerSize];
121-
wgConfig.Peers = new WGPeer[peerSize];
122121

123122
foreach (var line in lines)
124123
{
@@ -206,7 +205,6 @@ public bool ParseConfFile(string[] lines, out WgConfig wgConfig )
206205

207206
if (IsPeerSection)
208207
{
209-
var Peer = wgConfig.Peers[peerCount - 1];
210208
switch (key)
211209
{
212210
case "publickey":
@@ -228,16 +226,7 @@ public bool ParseConfFile(string[] lines, out WgConfig wgConfig )
228226
continue;
229227
case "allowedips":
230228
//TODO: support severals
231-
var allowedIpStrArr = value.Split(',');
232-
//Peer.AllowedIPs = new AllowedIP[allowedIpStrArr.Length];
233229

234-
for (int i = 0; i < allowedIpStrArr.Length; i++)
235-
{
236-
var allowedIpStr = allowedIpStrArr[i];
237-
var allowIpObj = IPNetwork.Parse(allowedIpStr);
238-
// Peer.AllowedIPs[i].Address = allowIpObj.Network;
239-
// Peer.AllowedIPs[i].Cidr = allowIpObj.Cidr;
240-
}
241230

242231
var allowedIpTopStr = value.Split(',').First().Trim();
243232
var allowTopIp = IPNetwork.Parse(allowedIpTopStr);

WireGuardNT-PInvoke/WireGuard/WGConfig.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class WgConfig
1616
public IPAddress[] DnsAddresses { get; set; }
1717

1818
public ushort InterfaceMtu = 1420;
19-
public WGPeer[] Peers { get; set; }
2019
public ushort InterfaceListenPort { get; set; }
2120

2221
public ConfigBuffer ConfigBuffer;

0 commit comments

Comments
 (0)