ibverbs_rs/multi_channel/ops/
channel_ops.rs1use crate::channel::TransportResult;
2use crate::channel::{PendingWork, PollingScope, ScopedPendingWork};
3use crate::ibverbs::error::IbvResult;
4use crate::ibverbs::work::*;
5use crate::multi_channel::MultiChannel;
6use crate::multi_channel::work_request::{
7 PeerReadWorkRequest, PeerReceiveWorkRequest, PeerSendWorkRequest, PeerWriteWorkRequest,
8};
9
10impl<'scope, 'env> PollingScope<'scope, 'env, MultiChannel> {
11 pub fn post_send(
13 &mut self,
14 wr: PeerSendWorkRequest<'_, 'env>,
15 ) -> TransportResult<ScopedPendingWork<'scope>> {
16 Ok(self.channel_post_send(|m| m.channel(wr.peer), wr.wr)?)
17 }
18
19 pub fn post_receive(
21 &mut self,
22 wr: PeerReceiveWorkRequest<'_, 'env>,
23 ) -> TransportResult<ScopedPendingWork<'scope>> {
24 Ok(self.channel_post_receive(|m| m.channel(wr.peer), wr.wr)?)
25 }
26
27 pub fn post_write(
29 &mut self,
30 wr: PeerWriteWorkRequest<'_, 'env>,
31 ) -> TransportResult<ScopedPendingWork<'scope>> {
32 Ok(self.channel_post_write(|m| m.channel(wr.peer), wr.wr)?)
33 }
34
35 pub fn post_read(
37 &mut self,
38 wr: PeerReadWorkRequest<'_, 'env>,
39 ) -> TransportResult<ScopedPendingWork<'scope>> {
40 Ok(self.channel_post_read(|m| m.channel(wr.peer), wr.wr)?)
41 }
42}
43
44impl MultiChannel {
45 pub fn send<'op>(
47 &'op mut self,
48 wr: PeerSendWorkRequest<'op, 'op>,
49 ) -> TransportResult<WorkSuccess> {
50 self.channel(wr.peer)?.send(wr.wr)
51 }
52
53 pub fn receive<'op>(
55 &'op mut self,
56 wr: PeerReceiveWorkRequest<'op, 'op>,
57 ) -> TransportResult<WorkSuccess> {
58 self.channel(wr.peer)?.receive(wr.wr)
59 }
60
61 pub fn write<'op>(
63 &'op mut self,
64 wr: PeerWriteWorkRequest<'op, 'op>,
65 ) -> TransportResult<WorkSuccess> {
66 self.channel(wr.peer)?.write(wr.wr)
67 }
68
69 pub fn read<'op>(
71 &'op mut self,
72 wr: PeerReadWorkRequest<'op, 'op>,
73 ) -> TransportResult<WorkSuccess> {
74 self.channel(wr.peer)?.read(wr.wr)
75 }
76}
77
78impl MultiChannel {
79 pub unsafe fn send_unpolled<'data>(
84 &mut self,
85 wr: PeerSendWorkRequest<'_, 'data>,
86 ) -> IbvResult<PendingWork<'data>> {
87 unsafe { self.channel(wr.peer)?.send_unpolled(wr.wr) }
88 }
89
90 pub unsafe fn receive_unpolled<'data>(
95 &mut self,
96 wr: PeerReceiveWorkRequest<'_, 'data>,
97 ) -> IbvResult<PendingWork<'data>> {
98 unsafe { self.channel(wr.peer)?.receive_unpolled(wr.wr) }
99 }
100
101 pub unsafe fn write_unpolled<'data>(
106 &mut self,
107 wr: PeerWriteWorkRequest<'_, 'data>,
108 ) -> IbvResult<PendingWork<'data>> {
109 unsafe { self.channel(wr.peer)?.write_unpolled(wr.wr) }
110 }
111
112 pub unsafe fn read_unpolled<'data>(
117 &mut self,
118 wr: PeerReadWorkRequest<'_, 'data>,
119 ) -> IbvResult<PendingWork<'data>> {
120 unsafe { self.channel(wr.peer)?.read_unpolled(wr.wr) }
121 }
122}