소스 검색

[IrDA]: Monitor mode.

Through the IrDA netlink set mode command, we switch to IrDA monitor
mode, where one IrLAP instance receives all the packets on the media,
without ever responding to them.

Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Samuel Ortiz 18 년 전
부모
커밋
411725280b
2개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      include/linux/irda.h
  2. 7 0
      net/irda/irlap_frame.c

+ 1 - 0
include/linux/irda.h

@@ -242,6 +242,7 @@ enum nl80211_attrs {
 /* IrDA modes */
 /* IrDA modes */
 #define IRDA_MODE_PRIMARY   0x1
 #define IRDA_MODE_PRIMARY   0x1
 #define IRDA_MODE_SECONDARY 0x2
 #define IRDA_MODE_SECONDARY 0x2
+#define IRDA_MODE_MONITOR   0x4
 
 
 #endif /* KERNEL_IRDA_H */
 #endif /* KERNEL_IRDA_H */
 
 

+ 7 - 0
net/irda/irlap_frame.c

@@ -101,6 +101,13 @@ void irlap_queue_xmit(struct irlap_cb *self, struct sk_buff *skb)
 
 
 	irlap_insert_info(self, skb);
 	irlap_insert_info(self, skb);
 
 
+	if (unlikely(self->mode & IRDA_MODE_MONITOR)) {
+		IRDA_DEBUG(3, "%s(): %s is in monitor mode\n", __FUNCTION__,
+			   self->netdev->name);
+		dev_kfree_skb(skb);
+		return;
+	}
+
 	dev_queue_xmit(skb);
 	dev_queue_xmit(skb);
 }
 }