Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions agent/crates/public/src/enums.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,13 +227,18 @@ impl fmt::Display for CaptureNetworkType {
pub enum IfType {
Other = 1,
Ethernet = 6,
TokenRing = 9,
TokenRing = 7,
Man = 9,
Ppp = 23,
Loopback = 24,
Atm = 37,
Ieee80211 = 71,
Tunnel = 131,
Ieee80211 = 53,
Tunnel = 62,
Wwanpp = 71,
Tunnel2 = 131,
Ieee1394 = 144,
Wman = 161,
Ieee802154 = 237,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
Expand Down
29 changes: 25 additions & 4 deletions agent/crates/public/src/utils/net/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ pub fn neighbor_lookup(mut dest_addr: IpAddr) -> Result<NeighborEntry> {
pub fn get_interface_by_index(if_index: u32) -> Result<Link> {
let adapters = get_pcap_interfaces()?;
debug!("adapters: {:?}, if_index: {}", adapters.clone(), if_index);
println!("adapters: {:?}, if_index: {}", adapters.clone(), if_index);
adapters
.into_iter()
.find(|link| link.if_index == if_index)
Expand Down Expand Up @@ -257,6 +258,7 @@ pub fn route_get(dest_addr: IpAddr) -> Result<Route> {
"failed to run GetBestInterfaceEx function with destination address={} because of win32 error code({}),\n{}",
dest_addr, ret_code, WIN_ERROR_CODE_STR
);
println!("route get {:?}", err_msg);
return Err(Error::Windows(err_msg));
}

Expand All @@ -282,8 +284,13 @@ pub fn route_get(dest_addr: IpAddr) -> Result<Route> {
"failed to run GetBestRoute2 function with destination address={} error: {}",
dest_addr, err
);
println!("route get {:?}", err_msg);
return Err(Error::Windows(err_msg));
}
println!(
"ooooooooooooooo {:?} {:?} {:?}",
best_if_index, route_row.InterfaceIndex, route_row.InterfaceLuid
);

// 解析 best_src_addr, gateway
let (src_addr, gateway) = match dest_addr {
Expand Down Expand Up @@ -326,6 +333,8 @@ fn get_pcap_interfaces() -> Result<Vec<Link>> {
let devices = pcap::Device::list()
.map_err(|e| Error::Windows(format!("list pcap interfaces failed: {}", e)))?;
let adapters = get_adapters_addresses().map(|(adapters, _)| adapters)?;
println!("devices: {:?}", devices);
println!("adapters {:?}", adapters);
let mut pcap_interfaces = vec![];
for device in devices {
if let Some(link) = adapters
Expand Down Expand Up @@ -398,6 +407,14 @@ pub fn get_adapters_addresses() -> Result<(Vec<Link>, Vec<Addr>)> {
while !adapter_ptr.is_null() {
let adapter = adapter_ptr.as_ref().unwrap();

println!(
"xxxxxxxxxxxxxxxxxxxxxx {:?} {:?} {:?} {:?} {:?}",
adapter.OperStatus,
adapter.AdapterName,
adapter.FriendlyName,
adapter.PhysicalAddress,
adapter.IfType
);
// 跳过status=down, adapter_name == null, friendly_name == null的interface
if adapter.OperStatus != IfOperStatusUp
|| adapter.AdapterName.is_null()
Expand Down Expand Up @@ -468,10 +485,14 @@ pub fn get_adapters_addresses() -> Result<(Vec<Link>, Vec<Addr>)> {
friendly_name, adapter_id, e
))
})? {
IfType::Ethernet | IfType::TokenRing | IfType::Ieee80211 | IfType::Ieee1394 => {
flags |= LinkFlags::BROADCAST | LinkFlags::MULTICAST
}
IfType::Ppp | IfType::Tunnel => {
IfType::Ethernet
| IfType::TokenRing
| IfType::Ieee80211
| IfType::Ieee1394
| IfType::Ieee802154
| IfType::Wman
| IfType::Man => flags |= LinkFlags::BROADCAST | LinkFlags::MULTICAST,
IfType::Ppp | IfType::Tunnel | IfType::Tunnel2 => {
flags |= LinkFlags::POINT_TO_POINT | LinkFlags::MULTICAST
}
IfType::Loopback => flags |= LinkFlags::LOOPBACK | LinkFlags::MULTICAST,
Expand Down
4 changes: 3 additions & 1 deletion agent/src/utils/environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> {
}

// FIXME: Getting ctrl_ip and ctrl_mac sometimes fails, increase three retry opportunities to ensure access to ctrl_ip and ctrl_mac
for _ in 0..3 {
for i in 0..3 {
let tuple = get_route_src_ip_and_mac(dest);
if tuple.is_err() {
warn!(
Expand All @@ -389,6 +389,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> {
continue;
}
let (ip, mac) = tuple.unwrap();
println!("xxxxxxxxxxxxxxxxxxxxxxxxx {:?} {:?} {:?}", i, ip, mac);
let links = link_list();
if links.is_err() {
warn!(
Expand All @@ -402,6 +403,7 @@ pub fn get_ctrl_ip_and_mac(dest: &IpAddr) -> Result<(IpAddr, MacAddr)> {
// use the public IP to check again to find the outgoing
// interface of the default route.
for link in links.unwrap().iter() {
println!("xxxxxxxxxxxxxx {:?}", link);
if link.mac_addr == mac {
if !link.flags.contains(LinkFlags::UP) {
let dest = if dest.is_ipv4() {
Expand Down