code: func interfaceNotifications(ch api.Channel) {
  	fmt.Println("Subscribing to notificaiton events")
  
  	notifChan := make(chan api.Message, 100)
  
  	// subscribe for specific notification message
  	sub, err := ch.SubscribeNotification(notifChan, &interfaces.SwInterfaceEvent{})
  	if err != nil {
  		panic(err)
  	}
  
  	// enable interface events in VPP
  	err = ch.SendRequest(&interfaces.WantInterfaceEvents{
  		PID:           uint32(os.Getpid()),
  		EnableDisable: 1,
  	}).ReceiveReply(&interfaces.WantInterfaceEventsReply{})
  	if err != nil {
  		panic(err)
  	}
  
  	// generate some events in VPP
  	err = ch.SendRequest(&interfaces.SwInterfaceSetFlags{
  		SwIfIndex:   0,
  		AdminUpDown: 0,
  	}).ReceiveReply(&interfaces.SwInterfaceSetFlagsReply{})
  	if err != nil {
  		panic(err)
  	}
  	err = ch.SendRequest(&interfaces.SwInterfaceSetFlags{
  		SwIfIndex:   0,
  		AdminUpDown: 1,
  	}).ReceiveReply(&interfaces.SwInterfaceSetFlagsReply{})
  	if err != nil {
  		panic(err)
  	}
  
  	// receive one notification
  	notif := (<-notifChan).(*interfaces.SwInterfaceEvent)
  	fmt.Printf("incoming event: %+v\n", notif)
  
  	// disable interface events in VPP
  	err = ch.SendRequest(&interfaces.WantInterfaceEvents{
  		PID:           uint32(os.Getpid()),
  		EnableDisable: 0,
  	}).ReceiveReply(&interfaces.WantInterfaceEventsReply{})
  	if err != nil {
  		panic(err)
  	}
  
  	// unsubscribe from delivery of the notifications
  	err = sub.Unsubscribe()
  	if err != nil {
  		panic(err)
  	}
  }
docs: // interfaceNotifications shows the usage of notification API. Note that for notifications,
  // you are supposed to create your own Go channel with your preferred buffer size. If the channel's
  // buffer is full, the notifications will not be delivered into it.