Skip to content

Commit 09bcc53

Browse files
committed
cleanup. removing redundant filter on primary.
1 parent e956194 commit 09bcc53

File tree

1 file changed

+35
-34
lines changed
  • vm/devices/net/netvsp/src

1 file changed

+35
-34
lines changed

vm/devices/net/netvsp/src/lib.rs

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ struct CoordinatorMessageUpdateType {
153153
/// This includes adding the guest VF device and switching the data path.
154154
guest_vf_state: bool,
155155
/// Update the receive filter for all channels.
156-
filter_state: Option<u32>,
156+
filter_state: bool,
157157
}
158158

159159
#[derive(PartialEq)]
@@ -599,7 +599,6 @@ struct PrimaryChannelState {
599599
tx_spread_sent: bool,
600600
guest_link_up: bool,
601601
pending_link_action: PendingLinkAction,
602-
packet_filter: u32,
603602
}
604603

605604
impl Inspect for PrimaryChannelState {
@@ -791,7 +790,6 @@ impl PrimaryChannelState {
791790
tx_spread_sent: false,
792791
guest_link_up: true,
793792
pending_link_action: PendingLinkAction::Default,
794-
packet_filter: rndisprot::NDIS_PACKET_TYPE_NONE,
795793
}
796794
}
797795

@@ -808,7 +806,6 @@ impl PrimaryChannelState {
808806
tx_spread_sent: bool,
809807
guest_link_down: bool,
810808
pending_link_action: Option<bool>,
811-
packet_filter: Option<u32>,
812809
) -> Result<Self, NetRestoreError> {
813810
// Restore control messages.
814811
let control_messages_len = control_messages.iter().map(|msg| msg.data.len()).sum();
@@ -888,9 +885,6 @@ impl PrimaryChannelState {
888885
PendingLinkAction::Default
889886
};
890887

891-
// If saved state does not have a packet filter set, default to directed, multicast, and broadcast.
892-
let packet_filter = packet_filter.unwrap_or(rndisprot::NPROTO_PACKET_FILTER);
893-
894888
Ok(Self {
895889
guest_vf_state,
896890
is_data_path_switched: None,
@@ -905,7 +899,6 @@ impl PrimaryChannelState {
905899
tx_spread_sent,
906900
guest_link_up: !guest_link_down,
907901
pending_link_action,
908-
packet_filter,
909902
})
910903
}
911904
}
@@ -1470,6 +1463,7 @@ impl Nic {
14701463
mut control: RestoreControl<'_>,
14711464
state: saved_state::SavedState,
14721465
) -> Result<(), NetRestoreError> {
1466+
let mut saved_packet_filter = 0u32;
14731467
if let Some(state) = state.open {
14741468
let open = match &state.primary {
14751469
saved_state::Primary::Version => vec![true],
@@ -1557,6 +1551,9 @@ impl Nic {
15571551
packet_filter,
15581552
} = ready;
15591553

1554+
// If saved state does not have a packet filter set, default to directed, multicast, and broadcast.
1555+
saved_packet_filter = packet_filter.unwrap_or(rndisprot::NPROTO_PACKET_FILTER);
1556+
15601557
let version = check_version(version)
15611558
.ok_or(NetRestoreError::UnsupportedVersion(version))?;
15621559

@@ -1617,7 +1614,6 @@ impl Nic {
16171614
tx_spread_sent,
16181615
guest_link_down,
16191616
pending_link_action,
1620-
packet_filter,
16211617
)?;
16221618
active.primary = Some(primary);
16231619
}
@@ -1640,6 +1636,11 @@ impl Nic {
16401636
self.insert_worker(channel_idx as u16, &request.unwrap(), state, false)?;
16411637
}
16421638
}
1639+
for worker in self.coordinator.state_mut().unwrap().workers.iter_mut() {
1640+
if let Some(worker_state) = worker.state_mut() {
1641+
worker_state.channel.packet_filter = saved_packet_filter;
1642+
}
1643+
}
16431644
} else {
16441645
control
16451646
.restore(&[false])
@@ -1800,6 +1801,11 @@ impl Nic {
18001801
PrimaryChannelGuestVfState::Restoring(saved_state) => saved_state,
18011802
};
18021803

1804+
let worker_0_packet_filter = coordinator.workers[0]
1805+
.state()
1806+
.unwrap()
1807+
.channel
1808+
.packet_filter;
18031809
saved_state::Primary::Ready(saved_state::ReadyPrimary {
18041810
version: ready.buffers.version as u32,
18051811
receive_buffer: ready.buffers.recv_buffer.saved_state(),
@@ -1829,7 +1835,7 @@ impl Nic {
18291835
tx_spread_sent: primary.tx_spread_sent,
18301836
guest_link_down: !primary.guest_link_up,
18311837
pending_link_action,
1832-
packet_filter: Some(primary.packet_filter),
1838+
packet_filter: Some(worker_0_packet_filter),
18331839
})
18341840
}
18351841
};
@@ -2812,7 +2818,10 @@ impl<T: RingMem> NetChannel<T> {
28122818
if restart_endpoint {
28132819
self.restart = Some(CoordinatorMessage::Restart);
28142820
}
2815-
self.send_coordinator_update_filter(packet_filter);
2821+
if let Some(filter) = packet_filter {
2822+
self.packet_filter = filter;
2823+
self.send_coordinator_update_filter();
2824+
}
28162825
rndisprot::STATUS_SUCCESS
28172826
}
28182827
Err(err) => {
@@ -2997,7 +3006,7 @@ impl<T: RingMem> NetChannel<T> {
29973006
Ok(())
29983007
}
29993008

3000-
fn send_coordinator_update_message(&mut self, guest_vf: bool, packet_filter: Option<u32>) {
3009+
fn send_coordinator_update_message(&mut self, guest_vf: bool, packet_filter: bool) {
30013010
if self.restart.is_none() {
30023011
self.restart = Some(CoordinatorMessage::Update(CoordinatorMessageUpdateType {
30033012
guest_vf_state: guest_vf,
@@ -3010,20 +3019,16 @@ impl<T: RingMem> NetChannel<T> {
30103019
} else if let Some(CoordinatorMessage::Update(ref mut update)) = self.restart {
30113020
// Add the new update to the existing message.
30123021
update.guest_vf_state |= guest_vf;
3013-
if packet_filter.is_some() {
3014-
update.filter_state = packet_filter;
3015-
}
3022+
update.filter_state |= packet_filter;
30163023
}
30173024
}
30183025

30193026
fn send_coordinator_update_vf(&mut self) {
3020-
self.send_coordinator_update_message(true, None);
3027+
self.send_coordinator_update_message(true, false);
30213028
}
30223029

3023-
fn send_coordinator_update_filter(&mut self, packet_filter: Option<u32>) {
3024-
if packet_filter.is_some() {
3025-
self.send_coordinator_update_message(false, packet_filter);
3026-
}
3030+
fn send_coordinator_update_filter(&mut self) {
3031+
self.send_coordinator_update_message(false, true);
30273032
}
30283033
}
30293034

@@ -3349,7 +3354,7 @@ impl Adapter {
33493354
let mut packet_filter = None;
33503355
match oid {
33513356
rndisprot::Oid::OID_GEN_CURRENT_PACKET_FILTER => {
3352-
packet_filter = self.oid_set_packet_filter(reader, primary)?;
3357+
packet_filter = self.oid_set_packet_filter(reader)?;
33533358
}
33543359
rndisprot::Oid::OID_TCP_OFFLOAD_PARAMETERS => {
33553360
self.oid_set_offload_parameters(reader, primary)?;
@@ -3437,15 +3442,10 @@ impl Adapter {
34373442
fn oid_set_packet_filter(
34383443
&self,
34393444
reader: impl MemoryRead + Clone,
3440-
primary: &mut PrimaryChannelState,
34413445
) -> Result<Option<u32>, OidError> {
34423446
let filter: rndisprot::RndisPacketFilterOidValue = reader.clone().read_plain()?;
3443-
if filter != primary.packet_filter {
3444-
primary.packet_filter = filter;
3445-
tracing::debug!(filter, "set packet filter");
3446-
return Ok(Some(primary.packet_filter));
3447-
}
3448-
Ok(None)
3447+
tracing::debug!(filter, "set packet filter");
3448+
Ok(Some(filter))
34493449
}
34503450

34513451
fn oid_set_offload_parameters(
@@ -3939,13 +3939,15 @@ impl Coordinator {
39393939
sleep_duration = None;
39403940
}
39413941
Message::Internal(CoordinatorMessage::Update(update_type)) => {
3942-
if let Some(packet_filter) = update_type.filter_state {
3942+
if update_type.filter_state {
39433943
self.stop_workers().await;
3944+
let worker_0_packet_filter =
3945+
self.workers[0].state().unwrap().channel.packet_filter;
39443946
self.workers.iter_mut().for_each(|worker| {
39453947
if let Some(state) = worker.state_mut() {
3946-
state.channel.packet_filter = packet_filter;
3948+
state.channel.packet_filter = worker_0_packet_filter;
39473949
tracing::debug!(
3948-
?packet_filter,
3950+
packet_filter = ?worker_0_packet_filter,
39493951
channel_idx = state.channel_idx,
39503952
"update packet filter"
39513953
);
@@ -4398,8 +4400,7 @@ impl Coordinator {
43984400
self.num_queues = num_queues;
43994401
}
44004402

4401-
let primary_packet_filter = state.state.primary.as_ref().unwrap().packet_filter;
4402-
4403+
let worker_0_packet_filter = self.workers[0].state().unwrap().channel.packet_filter;
44034404
// Provide the queue and receive buffer ranges for each worker.
44044405
for ((worker, queue), rx_buffer) in self.workers.iter_mut().zip(queues).zip(rx_buffers) {
44054406
worker.task_mut().queue_state = Some(QueueState {
@@ -4409,7 +4410,7 @@ impl Coordinator {
44094410
});
44104411
// Update the receive packet filter for the subchannel worker.
44114412
if let Some(worker) = worker.state_mut() {
4412-
worker.channel.packet_filter = primary_packet_filter;
4413+
worker.channel.packet_filter = worker_0_packet_filter;
44134414
}
44144415
}
44154416

0 commit comments

Comments
 (0)