コード例 #1
0
ファイル: output_tap.c プロジェクト: elfixit/pom-ng
static int output_tap_filter_update(void *priv, struct registry_param *param, struct ptype *value) {

	struct output_tap_priv *p = priv;
	if (p->listener)
		proto_packet_listener_set_filter(p->listener, p->filter);
	return POM_OK;
}
コード例 #2
0
ファイル: analyzer_docsis.c プロジェクト: dkarametos/pom-ng
static int analyzer_docsis_event_listeners_notify(void *obj, struct event_reg *evt_reg, int has_listeners) {
	
	struct analyzer *analyzer = obj;
	struct analyzer_docsis_priv *priv = analyzer->priv;

	if (has_listeners) {

		// Check if we are already listening
		if (priv->pkt_listener)
			return POM_OK;

		if (!priv->filter) {
			priv->filter = filter_proto_build("docsis_mgmt", "type", PTYPE_OP_GT, "3");
			if (!priv->filter) {
				pomlog(POMLOG_ERR "Error while building filter");
				return POM_ERR;
			}
		}

		priv->pkt_listener = proto_packet_listener_register(proto_get("docsis_mgmt"), 0, obj, analyzer_docsis_pkt_process);
		if (!priv->pkt_listener)
			return POM_ERR;

		// Filter out useless broadcast docsis_mgmt packets
		proto_packet_listener_set_filter(priv->pkt_listener, priv->filter);

	} else {
		
		if (event_has_listener(priv->evt_cm_new) || event_has_listener(priv->evt_cm_reg_status))
			return POM_OK;

		if (proto_packet_listener_unregister(priv->pkt_listener) != POM_OK)
			return POM_ERR;
		priv->pkt_listener = NULL;
	}

	return POM_OK;
}