MCPcopy Create free account
hub / github.com/NetSys/bess / SendPackets

Method SendPackets

core/drivers/unix_socket.cc:229–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

227}
228
229int UnixSocketPort::SendPackets(queue_t qid, bess::Packet **pkts, int cnt) {
230 int sent = 0;
231 int client_fd = client_fd_;
232
233 DCHECK_EQ(qid, 0);
234
235 if (client_fd == kNotConnectedFd) {
236 return 0;
237 }
238
239 for (int i = 0; i < cnt; i++) {
240 bess::Packet *pkt = pkts[i];
241
242 int nb_segs = pkt->nb_segs();
243 struct iovec iov[nb_segs];
244
245 struct msghdr msg = msghdr();
246 msg.msg_iov = iov;
247 msg.msg_iovlen = nb_segs;
248
249 ssize_t ret;
250
251 for (int j = 0; j < nb_segs; j++) {
252 iov[j].iov_base = pkt->head_data();
253 iov[j].iov_len = pkt->head_len();
254 pkt = pkt->next();
255 }
256
257 ret = sendmsg(client_fd, &msg, 0);
258 if (ret < 0) {
259 break;
260 }
261
262 sent++;
263 }
264
265 if (sent) {
266 bess::Packet::Free(pkts, sent);
267 }
268
269 return sent;
270}
271
272ADD_DRIVER(UnixSocketPort, "unix_port",
273 "packet exchange via a UNIX domain socket")

Callers

nothing calls this directly

Calls 5

msghdrClass · 0.85
nb_segsMethod · 0.80
head_dataMethod · 0.80
head_lenMethod · 0.80
nextMethod · 0.45

Tested by

no test coverage detected