+// WaitReady blocks until shared memory for sending
+// binary api calls is present on the file system.
+func (a *vppAPIClientAdapter) WaitReady() error {
+ watcher, err := fsnotify.NewWatcher()
+ if err != nil {
+ return err
+ }
+ defer watcher.Close()
+
+ err = watcher.Add(watchedFolder)
+ if err != nil {
+ return err
+ }
+ // Path to the shared memory segment with prefix, if set
+ var path string
+ if a.shmPrefix == "" {
+ path = watchedFolder + watchedFile
+ } else {
+ path = watchedFolder + a.shmPrefix + "-" + watchedFile
+ }
+ if fileExists(path) {
+ return nil
+ }
+
+ for {
+ ev := <-watcher.Events
+ if ev.Name == path && (ev.Op&fsnotify.Create) == fsnotify.Create {
+ break
+ }
+ }
+ return nil
+}
+
+func fileExists(name string) bool {
+ if _, err := os.Stat(name); err != nil {
+ if os.IsNotExist(err) {
+ return false
+ }
+ }
+ return true
+}
+