Lines Matching +full:left +full:-

6 /*-
7 * Copyright (c) 1996-1999 Whistle Communications, Inc.
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
45 * It has 4 hooks: left, right, left2right, and right2left. Data
46 * entering from the right is passed to the left and duplicated on
47 * right2left, and data entering from the left is passed to the right
49 * sent to left, and data from right2left to right.
79 struct hookinfo left; member
177 hinfo = &privdata->right; in ng_tee_newhook()
178 if (privdata->left.dest) in ng_tee_newhook()
179 privdata->left.dup = privdata->left.dest; in ng_tee_newhook()
180 privdata->left.dest = hinfo; in ng_tee_newhook()
181 privdata->right2left.dest = hinfo; in ng_tee_newhook()
183 hinfo = &privdata->left; in ng_tee_newhook()
184 if (privdata->right.dest) in ng_tee_newhook()
185 privdata->right.dup = privdata->right.dest; in ng_tee_newhook()
186 privdata->right.dest = hinfo; in ng_tee_newhook()
187 privdata->left2right.dest = hinfo; in ng_tee_newhook()
189 hinfo = &privdata->right2left; in ng_tee_newhook()
190 if (privdata->right.dest) in ng_tee_newhook()
191 privdata->right.dup = hinfo; in ng_tee_newhook()
193 privdata->right.dest = hinfo; in ng_tee_newhook()
195 hinfo = &privdata->left2right; in ng_tee_newhook()
196 if (privdata->left.dest) in ng_tee_newhook()
197 privdata->left.dup = hinfo; in ng_tee_newhook()
199 privdata->left.dest = hinfo; in ng_tee_newhook()
202 hinfo->hook = hook; in ng_tee_newhook()
203 bzero(&hinfo->stats, sizeof(hinfo->stats)); in ng_tee_newhook()
220 switch (msg->header.typecookie) { in ng_tee_rcvmsg()
222 switch (msg->header.cmd) { in ng_tee_rcvmsg()
229 if (msg->header.cmd != NGM_TEE_CLR_STATS) { in ng_tee_rcvmsg()
236 stats = (struct ng_tee_stats *)resp->data; in ng_tee_rcvmsg()
237 bcopy(&sc->right.stats, &stats->right, in ng_tee_rcvmsg()
238 sizeof(stats->right)); in ng_tee_rcvmsg()
239 bcopy(&sc->left.stats, &stats->left, in ng_tee_rcvmsg()
240 sizeof(stats->left)); in ng_tee_rcvmsg()
241 bcopy(&sc->right2left.stats, &stats->right2left, in ng_tee_rcvmsg()
242 sizeof(stats->right2left)); in ng_tee_rcvmsg()
243 bcopy(&sc->left2right.stats, &stats->left2right, in ng_tee_rcvmsg()
244 sizeof(stats->left2right)); in ng_tee_rcvmsg()
246 if (msg->header.cmd != NGM_TEE_GET_STATS) { in ng_tee_rcvmsg()
247 bzero(&sc->right.stats, in ng_tee_rcvmsg()
248 sizeof(sc->right.stats)); in ng_tee_rcvmsg()
249 bzero(&sc->left.stats, in ng_tee_rcvmsg()
250 sizeof(sc->left.stats)); in ng_tee_rcvmsg()
251 bzero(&sc->right2left.stats, in ng_tee_rcvmsg()
252 sizeof(sc->right2left.stats)); in ng_tee_rcvmsg()
253 bzero(&sc->left2right.stats, in ng_tee_rcvmsg()
254 sizeof(sc->left2right.stats)); in ng_tee_rcvmsg()
264 if (lasthook == sc->left.hook || lasthook == sc->right.hook) { in ng_tee_rcvmsg()
266 if (hinfo && hinfo->dest) { in ng_tee_rcvmsg()
268 NG_FWD_ITEM_HOOK(error, item, hinfo->dest->hook); in ng_tee_rcvmsg()
287 * send the original onwards out through the left link.
288 * Do the opposite for data coming in from the left link.
304 hinfo->stats.inOctets += m->m_pkthdr.len; in ng_tee_rcvdata()
305 hinfo->stats.inFrames++; in ng_tee_rcvdata()
308 if (hinfo->dup) { in ng_tee_rcvdata()
315 h = hinfo->dup; in ng_tee_rcvdata()
316 NG_SEND_DATA_ONLY(error, h->hook, m2); in ng_tee_rcvdata()
318 h->stats.outOctets += m->m_pkthdr.len; in ng_tee_rcvdata()
319 h->stats.outFrames++; in ng_tee_rcvdata()
324 if (hinfo->dest) { in ng_tee_rcvdata()
325 h = hinfo->dest; in ng_tee_rcvdata()
326 h->stats.outOctets += m->m_pkthdr.len; in ng_tee_rcvdata()
327 h->stats.outFrames++; in ng_tee_rcvdata()
328 NG_FWD_ITEM_HOOK(error, item, h->hook); in ng_tee_rcvdata()
337 * If we have both a left and right hook, then we probably want to extricate
346 if (privdata->left.hook && privdata->right.hook) in ng_tee_close()
347 ng_bypass(privdata->left.hook, privdata->right.hook); in ng_tee_close()
376 hinfo->hook = NULL; in ng_tee_disconnect()
379 if (sc->left.dest == hinfo) { in ng_tee_disconnect()
380 sc->left.dest = sc->left.dup; in ng_tee_disconnect()
381 sc->left.dup = NULL; in ng_tee_disconnect()
382 } else if (sc->left.dup == hinfo) in ng_tee_disconnect()
383 sc->left.dup = NULL; in ng_tee_disconnect()
384 if (sc->right.dest == hinfo) { in ng_tee_disconnect()
385 sc->right.dest = sc->right.dup; in ng_tee_disconnect()
386 sc->right.dup = NULL; in ng_tee_disconnect()
387 } else if (sc->right.dup == hinfo) in ng_tee_disconnect()
388 sc->right.dup = NULL; in ng_tee_disconnect()
389 if (sc->left2right.dest == hinfo) in ng_tee_disconnect()
390 sc->left2right.dest = NULL; in ng_tee_disconnect()
391 if (sc->right2left.dest == hinfo) in ng_tee_disconnect()
392 sc->right2left.dest = NULL; in ng_tee_disconnect()