code: func LogDownlinkFrameForGateway(p *redis.Pool, frame gw.DownlinkFrame) error {
  	var id lorawan.EUI64
  	copy(id[:], frame.TxInfo.GatewayId)
  
  	c := p.Get()
  	defer c.Close()
  
  	key := fmt.Sprintf(gatewayFrameLogDownlinkPubSubKeyTempl, id)
  
  	b, err := proto.Marshal(&frame)
  	if err != nil {
  		return errors.Wrap(err, "marshal downlink frame error")
  	}
  
  	_, err = c.Do("PUBLISH", key, b)
  	if err != nil {
  		return errors.Wrap(err, "publish frame to gateway channel error")
  	}
  	return nil
  }
docs: // LogDownlinkFrameForGateway logs the given frame to the gateway pub-sub key.